SGU 180 Inversions 逆序数
2014-01-05 19:38
330 查看
--------------
--------------
int n; int a[maxn]; int b[maxn]; struct BIT{ int n; int tree[maxn]; void init(int n){ this->n=n; memset(tree,0,sizeof(tree)); } int lowbit(int x){ return x&(-x); } void add(int x,int val){ for (int i=x;i<=n;i+=lowbit(i)) tree[i]+=val; } int query(int x){ int ret=0; for (int i=x;i>0;i-=lowbit(i)) ret+=tree[i]; return ret; } //离散 p=lower_bound(b+1,b+n+1,a[i])-b; //逆序数 x=(i-1)-query(p);add(p,1); }bt; int main(){ cin>>n; bt.init(n); for (int i=1;i<=n;i++){ cin>>a[i]; b[i]=a[i]; } sort(b+1,b+1+n); LL sum=0; for (int i=1;i<=n;i++){ int p=lower_bound(b+1,b+n+1,a[i])-b; int x=i-1-bt.query(p); bt.add(p,1); sum+=x; } cout<<sum<<endl; return 0; }
--------------
相关文章推荐
- 【SGU 180】Inversions —— 归并排序或树形数组计算逆序对
- SGU 180 Inversions ( 逆序对(卡数据范围))
- sgu-180 Inversions 裸题:求逆序对个数
- SGU 180 Inversions 逆序数
- SGU 180 Inversions(树状数组求逆序对)
- SGU 180-Inversions(树状数组离散化求逆序对数)
- SGU 180 Inversions(离散化 + 线段树求逆序对)
- SGU 180 Inversions <一维树状数组区间查询>
- 逆序数 pku 1804 pku 2299 sgu 180
- SGU 180 Inversions【树状数组】
- sgu 180 - Inversions (离散化+树状数组)
- SGU 180 Inversions
- SGU 180 Inversions
- SGU 180 Inversions
- SGU180——Inversions
- SGU 180 - Inversions(逆序数)
- SGU 180 Inversions (树状数组+离散化)
- SGU_180_Inversions
- SGU180:Inversions(树状数组)
- sgu 180 Inversions——树状数组求逆序数