HDU 1394 Minimum Inversion Number
2012-02-16 15:04
204 查看
http://acm.hdu.edu.cn/showproblem.php?pid=1394
View Code
View Code
//1394 #include <stdio.h> const int N=5010; int st[4*N],a ; void newup(int rt) { st[rt]=st[rt*2]+st[rt*2+1]; } void build(int l,int r,int rt) { if (l==r) { st[rt]=0; return; } int m=(l+r)/2; build(l,m,rt*2); build(m+1,r,rt*2+1); newup(rt); } void update(int p,int l,int r,int rt) { if (l==r) { st[rt]++; return; } int m=(l+r)/2; if (p<=m) update(p,l,m,rt*2); else update(p,m+1,r,rt*2+1); newup(rt); } int query(int a,int b,int l,int r,int rt) { if (a<=l && r<=b) return st[rt]; int m=(l+r)/2,s=0; if (a<=m) s+=query(a,b,l,m,rt*2); if (b>m) s+=query(a,b,m+1,r,rt*2+1); return s; } int main() { int n,i; while (~scanf("%d",&n)) { build(0,n-1,1); int s=0; for (i=1;i<=n;i++) { scanf("%d",&a[i]); s+=query(a[i],n-1,0,n-1,1); update(a[i],0,n-1,1); } int min=s; for (i=1;i<=n;i++) { s+=n-a[i]-a[i]-1; if (s<min) min=s; } printf("%d\n",min); } return 0; }
相关文章推荐
- 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 线段树求逆序数
- hdu1394-Minimum Inversion Number(线段树)
- HDU 1394 Minimum Inversion Number(线段树)
- HDU1394-Minimum Inversion Number
- [HDU 1394]Minimum Inversion Number(归并排序/线段树)
- 逆序数 之 hdu 1394 Minimum Inversion Number
- HDU 1394 & ZOJ 1484 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