标签:pos class ini printf output numbers hdu return void
#include<bits/stdc++.h> #include<cstdio> #include<algorithm> using namespace std; #define lson l,m,rt<<1 #define rson m+1,r,rt<<1|1 const int M = 5555; int sum[M<<2]; int n; void pushup(int rt){ sum[rt] = sum[rt<<1] + sum[rt<<1|1]; } void build(int l,int r,int rt){ sum[rt] = 0; if(l==r) return ; int m = (l+r) >> 1; build(lson); build(rson); } void update(int p,int l,int r,int rt){ if(l == r){ sum[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 sum[rt]; } int m = (l + r) >> 1; int ret = 0; if(L <= m) ret += query(L,R,lson); if(R>m) ret += query(L,R,rson); return ret; } int a[M]; int main(){ int sum1; while(scanf("%d",&n)!=EOF){ build(0,n-1,1); int sum1 = 0; for(int i = 0;i < n;i++){ scanf("%d",&a[i]); sum1 += query(a[i]+1,n-1,0,n-1,1); update(a[i]+1,0,n-1,1); } int ans = sum1; for(int i = 0;i < n; i++){ sum1 = sum1 - a[i] + n - a[i] - 1; ans = min(ans,sum1); } printf("%d\n",ans); } return 0; }
HDU 1394 Minimum Inversion Number
标签:pos class ini printf output numbers hdu return void
原文地址:http://www.cnblogs.com/kls123/p/7840591.html