Submission #759228

#TimeUsernameProblemLanguageResultExecution timeMemory
7592281075508020060209tcGroup Photo (JOI21_ho_t3)C++14
64 / 100
5056 ms468 KiB
#include<bits/stdc++.h>
using namespace std;
#define int long long
int lowbit(int x){return x&-x;}
int bit[200005];

void upd(int pl,int val){
while(pl<=5000){
    bit[pl]+=val;
    pl+=lowbit(pl);
}
}
int qsum(int pl){
int ret=0;
while(pl){
    ret+=bit[pl];
    pl-=lowbit(pl);
}
return ret;
}



int n;
int ar[5010];
int dp[5010];


signed main(){
cin>>n;
for(int i=1;i<=n;i++){
    cin>>ar[i];
}

dp[0]=0;
for(int i=1;i<=n;i++){

    for(int j=0;j<=i-1;j++){
        int cal=dp[j];
        for(int a=1;a<=5000;a++){
            bit[a]=0;
        }

        for(int a=1;a<=n;a++){
            if(ar[a]>j&&ar[a]<=i){
                //for(int b=1;b<a;b++){
                  //  if((ar[b]<ar[a]&&ar[b]>j)||(ar[b]>i) ){cal++;}
                //}
                cal+=qsum(ar[a]);
            }
            if(ar[a]>j&&ar[a]<=i){
                upd(ar[a],1);
            }
            if(ar[a]>i){
                upd(1,1);
            }
        }
        if(j==0){dp[i]=cal;}
        dp[i]=min(dp[i],cal);
    }
   // cout<<dp[i]<<" ";
}
cout<<dp[n]<<endl;




}
/*
6 5
1 2 1 100000
1 3 1 1
2 6 1 1000
2 4 1 1
2 5 1 1
*/
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...