This submission is migrated from previous version of oj.uz, which used different machine for grading. This submission may have different result if resubmitted.
#include <bits/stdc++.h>
#define int long long
#define IO ios::sync_with_stdio(0), cin.tie(0);
#define FOR(i, a, b) for (int i = a; i <= b; i++)
using namespace std;
using pii = pair<int, int>;
void dbg() {;}
template<class T, class ...U>
void dbg(T a, U ...b) { cout << a << " "; dbg(b...); }
void ent() { cout << "\n"; }
const int INF = 1e16;
const int N = 5005;
int a[N], pos[N];
int cnt[2][N][N];
int dp[N];
signed main() {
IO;
int n;
cin >> n;
FOR(i, 1, n) {
cin >> a[i];
pos[a[i]] = i;
}
FOR(i, 1, n) {
int x = pos[i];
for (int j = 1; j <= n; j++) {
cnt[0][i][j] = cnt[0][i - 1][j] + cnt[0][i][j - 1] - cnt[0][i - 1][j - 1];
cnt[0][i][j] += (j == x);
}
for (int j = n; j >= 1; j--) {
cnt[1][i][j] = cnt[1][i - 1][j] + cnt[1][i][j + 1] - cnt[1][i - 1][j + 1];
cnt[1][i][j] += (j == x);
}
}
// FOR(i, 1, n) {
// FOR(j, 1, n) dbg(cnt[1][i][j]);
// ent();
// }
fill(dp, dp + N, INF);
dp[0] = 0;
FOR(l, 1, n) {
int cst = 0;
FOR(r, l, n) {
cst += cnt[1][l - 1][pos[r]] + (cnt[0][r - 1][pos[r]] - cnt[0][l - 1][pos[r]]);
dp[r] = min(dp[r], dp[l - 1] + cst);
}
cst = 0;
FOR(r, l, n) {
cst += cnt[1][r - 1][pos[r]];
dp[r] = min(dp[r], dp[l - 1] + cst);
}
}
cout << dp[n] << "\n";
return 0;
}
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |