#include<cstdio>
#include<iostream>
#include<cstring>
#include<string>
using namespace std;
#define MAXN 5001
#define lson l,m,rt<<1
#define rson m+1,r,rt<<1|1
int INV[MAXN<<2];
void PushUP(int rt){
INV[rt]=INV[rt<<1]+INV[rt<<1|1];
}
void build(int l,int r,int rt){
INV[rt]=0;
if(l==r){
// INV[rt]=0;
return;
}
int m=(l+r)>>1;
build(lson);
build(rson);
}
void update(int p,int l,int r,int rt){
if(l==r) {INV[rt]++;return ;}
int m=(l+r)>>1;
if(p<=m) update(p,lson);
else update(p,rson);
PushUP(rt);
}
int query(int L,int R,int l,int r,int rt ){
if(L<=l&&r<=R) return INV[rt];
int m=(l+r)>>1;
int sum=0;
if(L<=m) sum+=query(L,R,lson);
if(R>m) sum+=query(L,R,rson);
return sum;
}
int x[MAXN];
int main(){
int n,i;
while(~scanf("%d",&n)){
build(0,n-1,1);
int sum=0,ans=1<<30;
for( i=0;i<n;i++){
scanf("%d",x+i);
sum+=query(x[i],n-1,0,n-1,1);
update(x[i],0,n-1,1);
}
// cout<<sum<<endl;
for(i=0;i<n;i++){
sum=sum-x[i]+(n-x[i]-1);
// cout<<sum<<endl;
ans=sum>ans?ans:sum;
}
printf("%d\n",ans);
}
return 0;
}
hdu1484线段树or暴力
最新推荐文章于 2020-07-21 21:21:14 发布