#pragma GCC optimize("Ofast")
#include <bits/stdc++.h>
using namespace std;
mt19937_64 rng((int)std::chrono::steady_clock::now().time_since_epoch().count());
const int MAXN = 5030;
const int MOD = 1e9 + 7;
//#define int long long
int rnd(int x, int y) { // random number generator
int u= uniform_int_distribution<int>(x, y)(rng); return u;
}
void solve(int tc) {
int n;
cin >> n;
int h[n+1];
for(int i=1; i<=n; i++) cin >> h[i];
int pos[n+1];
for(int i=1; i<=n; i++) pos[h[i]] = i;
int inv[n+1][n+1];
for(int i=0; i<=n; i++) {
for(int j=0; j<=n; j++) {
inv[i][j] = 0;
}
}
for(int i=1; i<=n; i++) {
for(int j=i+1; j<=n; j++) {
if(h[i] > h[j]) {
inv[1][h[i]]++;
inv[h[j] + 1][h[i]]--;
}
}
}
for(int i=1; i<=n; i++) {
for(int j=1; j<=n; j++) {
inv[i][j] += inv[i][j-1] + inv[i-1][j] - inv[i-1][j-1];
}
}
int ext_pos[n+1][n+1];
for(int i=0; i<=n; i++) {
for(int j=0; j<=n; j++) {
ext_pos[i][j] = 0;
}
}
int right[n+1][n+1];
for(int i=0; i<=n; i++) {
for(int j=0; j<=n; j++) {
right[i][j] = 0;
}
}
for(int i=n-1; i>=1; i--) {
for(int j=0; j<=n; j++) {
right[h[i]][j] = right[h[i+1]][j] + (h[i+1] <= j);
}
}
for(int i=1; i<=n; i++) {
for(int j=0; j<=n; j++) {
ext_pos[i][j] = pos[i] + right[i][j];
}
}
for(int i=2; i<=n; i++) {
for(int j=0; j<=n; j++) {
ext_pos[i][j] += ext_pos[i-1][j];
}
}
int dp[n+1];
for(int i=0; i<=n; i++) dp[i] = 1e9;
dp[0] = 0;
for(int i=1; i<=n; i++) {
for(int j=0; j<i; j++) {
int ref = inv[j+1][i];
int sz = i-j;
int mx = sz * (sz-1) / 2;
int ono = ext_pos[i][j] - ext_pos[j][j];
int rem = (j+1 + i) * (i - (j+1) + 1) / 2;
dp[i] = min(dp[i], dp[j] + mx - ref + ono - rem);
}
}
cout << dp[n] << "\n";
}
int32_t main(){
ios::sync_with_stdio(0); cin.tie(0);
int t = 1; //cin >> t;
for(int i=1; i<=t; i++) solve(i);
}
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
0 ms |
204 KB |
Output is correct |
2 |
Correct |
0 ms |
204 KB |
Output is correct |
3 |
Correct |
0 ms |
204 KB |
Output is correct |
4 |
Correct |
0 ms |
204 KB |
Output is correct |
5 |
Correct |
0 ms |
204 KB |
Output is correct |
6 |
Correct |
0 ms |
204 KB |
Output is correct |
7 |
Correct |
0 ms |
204 KB |
Output is correct |
8 |
Correct |
0 ms |
204 KB |
Output is correct |
9 |
Correct |
0 ms |
204 KB |
Output is correct |
10 |
Correct |
0 ms |
204 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
0 ms |
204 KB |
Output is correct |
2 |
Correct |
0 ms |
204 KB |
Output is correct |
3 |
Correct |
0 ms |
204 KB |
Output is correct |
4 |
Correct |
0 ms |
204 KB |
Output is correct |
5 |
Correct |
0 ms |
204 KB |
Output is correct |
6 |
Correct |
0 ms |
204 KB |
Output is correct |
7 |
Correct |
0 ms |
204 KB |
Output is correct |
8 |
Correct |
0 ms |
204 KB |
Output is correct |
9 |
Correct |
0 ms |
204 KB |
Output is correct |
10 |
Correct |
0 ms |
204 KB |
Output is correct |
11 |
Correct |
0 ms |
204 KB |
Output is correct |
12 |
Correct |
0 ms |
204 KB |
Output is correct |
13 |
Correct |
0 ms |
204 KB |
Output is correct |
14 |
Correct |
0 ms |
204 KB |
Output is correct |
15 |
Correct |
0 ms |
204 KB |
Output is correct |
16 |
Correct |
0 ms |
204 KB |
Output is correct |
17 |
Correct |
0 ms |
204 KB |
Output is correct |
18 |
Correct |
0 ms |
204 KB |
Output is correct |
19 |
Correct |
0 ms |
204 KB |
Output is correct |
20 |
Correct |
0 ms |
204 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
0 ms |
204 KB |
Output is correct |
2 |
Correct |
0 ms |
204 KB |
Output is correct |
3 |
Correct |
0 ms |
204 KB |
Output is correct |
4 |
Correct |
0 ms |
204 KB |
Output is correct |
5 |
Correct |
0 ms |
204 KB |
Output is correct |
6 |
Correct |
0 ms |
204 KB |
Output is correct |
7 |
Correct |
0 ms |
204 KB |
Output is correct |
8 |
Correct |
0 ms |
204 KB |
Output is correct |
9 |
Correct |
0 ms |
204 KB |
Output is correct |
10 |
Correct |
0 ms |
204 KB |
Output is correct |
11 |
Correct |
0 ms |
204 KB |
Output is correct |
12 |
Correct |
0 ms |
204 KB |
Output is correct |
13 |
Correct |
0 ms |
204 KB |
Output is correct |
14 |
Correct |
0 ms |
204 KB |
Output is correct |
15 |
Correct |
0 ms |
204 KB |
Output is correct |
16 |
Correct |
0 ms |
204 KB |
Output is correct |
17 |
Correct |
0 ms |
204 KB |
Output is correct |
18 |
Correct |
0 ms |
204 KB |
Output is correct |
19 |
Correct |
0 ms |
204 KB |
Output is correct |
20 |
Correct |
0 ms |
204 KB |
Output is correct |
21 |
Correct |
1 ms |
716 KB |
Output is correct |
22 |
Correct |
1 ms |
716 KB |
Output is correct |
23 |
Correct |
1 ms |
716 KB |
Output is correct |
24 |
Correct |
1 ms |
716 KB |
Output is correct |
25 |
Correct |
1 ms |
716 KB |
Output is correct |
26 |
Correct |
1 ms |
716 KB |
Output is correct |
27 |
Correct |
1 ms |
716 KB |
Output is correct |
28 |
Correct |
1 ms |
716 KB |
Output is correct |
29 |
Correct |
1 ms |
716 KB |
Output is correct |
30 |
Correct |
1 ms |
716 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
0 ms |
204 KB |
Output is correct |
2 |
Correct |
0 ms |
204 KB |
Output is correct |
3 |
Correct |
0 ms |
204 KB |
Output is correct |
4 |
Correct |
0 ms |
204 KB |
Output is correct |
5 |
Correct |
0 ms |
204 KB |
Output is correct |
6 |
Correct |
0 ms |
204 KB |
Output is correct |
7 |
Correct |
0 ms |
204 KB |
Output is correct |
8 |
Correct |
0 ms |
204 KB |
Output is correct |
9 |
Correct |
0 ms |
204 KB |
Output is correct |
10 |
Correct |
0 ms |
204 KB |
Output is correct |
11 |
Correct |
0 ms |
204 KB |
Output is correct |
12 |
Correct |
0 ms |
204 KB |
Output is correct |
13 |
Correct |
0 ms |
204 KB |
Output is correct |
14 |
Correct |
0 ms |
204 KB |
Output is correct |
15 |
Correct |
0 ms |
204 KB |
Output is correct |
16 |
Correct |
0 ms |
204 KB |
Output is correct |
17 |
Correct |
0 ms |
204 KB |
Output is correct |
18 |
Correct |
0 ms |
204 KB |
Output is correct |
19 |
Correct |
0 ms |
204 KB |
Output is correct |
20 |
Correct |
0 ms |
204 KB |
Output is correct |
21 |
Correct |
1 ms |
716 KB |
Output is correct |
22 |
Correct |
1 ms |
716 KB |
Output is correct |
23 |
Correct |
1 ms |
716 KB |
Output is correct |
24 |
Correct |
1 ms |
716 KB |
Output is correct |
25 |
Correct |
1 ms |
716 KB |
Output is correct |
26 |
Correct |
1 ms |
716 KB |
Output is correct |
27 |
Correct |
1 ms |
716 KB |
Output is correct |
28 |
Correct |
1 ms |
716 KB |
Output is correct |
29 |
Correct |
1 ms |
716 KB |
Output is correct |
30 |
Correct |
1 ms |
716 KB |
Output is correct |
31 |
Correct |
9 ms |
7856 KB |
Output is correct |
32 |
Correct |
7 ms |
7756 KB |
Output is correct |
33 |
Correct |
7 ms |
7756 KB |
Output is correct |
34 |
Correct |
8 ms |
7824 KB |
Output is correct |
35 |
Correct |
8 ms |
7820 KB |
Output is correct |
36 |
Correct |
9 ms |
7772 KB |
Output is correct |
37 |
Correct |
10 ms |
7852 KB |
Output is correct |
38 |
Correct |
8 ms |
7796 KB |
Output is correct |
39 |
Correct |
9 ms |
7820 KB |
Output is correct |
40 |
Correct |
7 ms |
7756 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
0 ms |
204 KB |
Output is correct |
2 |
Correct |
0 ms |
204 KB |
Output is correct |
3 |
Correct |
0 ms |
204 KB |
Output is correct |
4 |
Correct |
0 ms |
204 KB |
Output is correct |
5 |
Correct |
0 ms |
204 KB |
Output is correct |
6 |
Correct |
0 ms |
204 KB |
Output is correct |
7 |
Correct |
0 ms |
204 KB |
Output is correct |
8 |
Correct |
0 ms |
204 KB |
Output is correct |
9 |
Correct |
0 ms |
204 KB |
Output is correct |
10 |
Correct |
0 ms |
204 KB |
Output is correct |
11 |
Correct |
0 ms |
204 KB |
Output is correct |
12 |
Correct |
0 ms |
204 KB |
Output is correct |
13 |
Correct |
0 ms |
204 KB |
Output is correct |
14 |
Correct |
0 ms |
204 KB |
Output is correct |
15 |
Correct |
0 ms |
204 KB |
Output is correct |
16 |
Correct |
0 ms |
204 KB |
Output is correct |
17 |
Correct |
0 ms |
204 KB |
Output is correct |
18 |
Correct |
0 ms |
204 KB |
Output is correct |
19 |
Correct |
0 ms |
204 KB |
Output is correct |
20 |
Correct |
0 ms |
204 KB |
Output is correct |
21 |
Correct |
1 ms |
716 KB |
Output is correct |
22 |
Correct |
1 ms |
716 KB |
Output is correct |
23 |
Correct |
1 ms |
716 KB |
Output is correct |
24 |
Correct |
1 ms |
716 KB |
Output is correct |
25 |
Correct |
1 ms |
716 KB |
Output is correct |
26 |
Correct |
1 ms |
716 KB |
Output is correct |
27 |
Correct |
1 ms |
716 KB |
Output is correct |
28 |
Correct |
1 ms |
716 KB |
Output is correct |
29 |
Correct |
1 ms |
716 KB |
Output is correct |
30 |
Correct |
1 ms |
716 KB |
Output is correct |
31 |
Correct |
9 ms |
7856 KB |
Output is correct |
32 |
Correct |
7 ms |
7756 KB |
Output is correct |
33 |
Correct |
7 ms |
7756 KB |
Output is correct |
34 |
Correct |
8 ms |
7824 KB |
Output is correct |
35 |
Correct |
8 ms |
7820 KB |
Output is correct |
36 |
Correct |
9 ms |
7772 KB |
Output is correct |
37 |
Correct |
10 ms |
7852 KB |
Output is correct |
38 |
Correct |
8 ms |
7796 KB |
Output is correct |
39 |
Correct |
9 ms |
7820 KB |
Output is correct |
40 |
Correct |
7 ms |
7756 KB |
Output is correct |
41 |
Correct |
500 ms |
293724 KB |
Output is correct |
42 |
Correct |
497 ms |
293796 KB |
Output is correct |
43 |
Correct |
516 ms |
293956 KB |
Output is correct |
44 |
Correct |
506 ms |
293916 KB |
Output is correct |
45 |
Correct |
522 ms |
293876 KB |
Output is correct |
46 |
Correct |
503 ms |
293956 KB |
Output is correct |
47 |
Correct |
499 ms |
294032 KB |
Output is correct |
48 |
Correct |
495 ms |
294040 KB |
Output is correct |
49 |
Correct |
506 ms |
294232 KB |
Output is correct |
50 |
Correct |
499 ms |
294040 KB |
Output is correct |
51 |
Correct |
523 ms |
294032 KB |
Output is correct |
52 |
Correct |
499 ms |
294076 KB |
Output is correct |
53 |
Correct |
507 ms |
294036 KB |
Output is correct |
54 |
Correct |
541 ms |
294028 KB |
Output is correct |
55 |
Correct |
500 ms |
294084 KB |
Output is correct |