hdu 1394——Minimum Inversion Number
2013-07-28 16:06
239 查看
线段树
树状数组
//31MS 340K c++ #include<iostream> #include<cstdio> using namespace std; #define maxn 5010 #define ls (rt<<1) #define rs (rt<<1|1) #define mid ((t[rt].l+t[rt].r)>>1) struct tree { int l,r; int sum; }t[maxn<<4]; int num[maxn]; void pushup(int rt) { t[rt].sum=t[ls].sum+t[rs].sum; } void build(int rt,int l,int r) { t[rt].l=l,t[rt].r=r,t[rt].sum=0; if(l==r) return ; build(ls,l,mid); build(rs,mid+1,r); } void add(int rt,int x) { if(t[rt].l==t[rt].r) { t[rt].sum=1; return ; } if(x<=mid) add(ls,x); else add(rs,x); pushup(rt); } int query(int rt,int l,int r) { if(t[rt].l==l&&t[rt].r==r) return t[rt].sum; if(r<=mid) return query(ls,l,r); else if(l>mid) return query(rs,l,r); else return query(ls,l,mid)+query(rs,mid+1,r); } int main() { int n; while(~scanf("%d",&n)) { build(1,0,n-1); int sum=0; for(int i=0;i<n;i++) { scanf("%d",&num[i]); sum+=query(1,num[i],n-1); add(1,num[i]); } int ans=sum; for(int i=0;i<n-1;i++) { sum+=n-1-2*num[i]; ans=min(ans,sum); } printf("%d\n",ans); } return 0; }
树状数组
//15MS 308K c++ #include<cstdio> #include<iostream> using namespace std; #define maxn 5010 int num[maxn]; int t[maxn]; int n; int lowbit(int x) { return (-x)&x; } int Sum(int x) { int sum=0; while(x>=1) { sum+=t[x]; x-=lowbit(x); } return sum; } void Update(int x) { while(x<=n) { t[x]++; x+=lowbit(x); } } int main() { while(~scanf("%d",&n)) { memset(t,0,sizeof(t)); int sum=0; for(int i=0;i<n;i++) { scanf("%d",&num[i]); sum+=Sum(n)-Sum(num[i]+1); Update(num[i]+1); } int ans=sum; for(int i=0;i<n-1;i++) { sum+=n-1-2*num[i]; ans=min(sum,ans); } printf("%d\n",ans); } return 0; }
相关文章推荐
- Hdu 1394 Minimum Inversion Number
- Minimum Inversion Number----HDU_1394----线段树之单点更新
- HDU1394 Minimum Inversion Number
- hdu 1394 Minimum Inversion Number(树状数组)
- HDU 1394——Minimum Inversion Number(最小逆序数)
- [HDU] 1394 Minimum Inversion Number [线段树求逆序数]
- HDU 1394 Minimum Inversion Number 线段树
- hdu 1394 Minimum Inversion Number(逆序对数+线段树)
- HDU 1394- Minimum Inversion Number(线段树求逆序数)
- HDU 1394 Minimum Inversion Number 线段树
- hdu 1394 Minimum Inversion Number (线段树求逆序数)
- HDU 1394 Minimum Inversion Number
- HDU 1394 Minimum Inversion Number
- hdu 1394 Minimum Inversion Number
- HDU 1394 (逆序数) Minimum Inversion Number
- HDU1394--Minimum Inversion Number
- HDU 1394 Minimum Inversion Number 树状数组
- hdu 1394 Minimum Inversion Number
- HDU 1394 Minimum Inversion Number (线段树+最小逆序数)
- Hdu 1394-Minimum Inversion Number【暴力求解Or线段树Or树状数组】