#include<bits/stdc++.h>
using namespace std;
#define IOS cin.tie(nullptr)->sync_with_stdio(0),cin.exceptions(cin.failbit);
#define lb(x) (x)&-(x)
#define all(x) (x).begin(),(x).end()
#define ll long long
constexpr int maxN=5e3+5;
int n,val[maxN],cost[maxN][maxN],cost2[maxN][maxN],dp[maxN];
int main(){
IOS
cin>>n;
for(int i = 1;i<=n;i++)cin>>val[i];
for(int i = 1;i<=n;i++)for(int j = 1;j<i;j++){
if(val[j]<val[i]){
cost[1][val[i]]++;
cost[val[j]+1][val[i]]--;
}
else {
cost[1][val[i]]++;
cost[1][val[j]]--;
cost[val[i]+1][val[i]]--;
cost[val[i]+1][val[j]]++;
cost2[1][val[i]]++;
cost2[val[i]+1][val[i]]--;
}
}
for(int i = 1;i<=n;i++)for(int j = 1;j<=n;j++)cost[i][j]+=cost[i][j-1];
for(int i = 1;i<=n;i++)for(int j = 1;j<=n;j++)cost[i][j]+=cost[i-1][j];
for(int i = 1;i<=n;i++)for(int j = 1;j<=n;j++)cost2[i][j]+=cost2[i][j-1];
for(int i = 1;i<=n;i++)for(int j = 1;j<=n;j++)cost2[i][j]+=cost2[i-1][j];
for(int i = 1;i<=n;i++){
dp[i] = 1e9;
for(int j = 0;j<i;j++){
dp[i] = min(dp[i],dp[j]+min(cost2[j+1][i],cost[j+1][i]));
}
}
cout<<dp[n]<<'\n';
}
# | 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... |