poj_2299Ultra-QuickSort,树状数组离散化
2014-09-04 22:14
344 查看
求逆序数
#include<iostream> #include<cstdio> #include<cstring> #include<algorithm> using namespace std; struct node { int num; int pos; }; node st[500010]; int reflect[500010]; int a[500010]; int n; bool cmp(node a,node b) { return a.num<b.num; } int lowbit(int x) { return x&(-x); } int sum(int x) { int ret=0; while(x>0) { ret+=a[x]; x-=lowbit(x); } return ret; } void add(int x,int d) { while(x<=n) { a[x]+=d; x+=lowbit(x); } } int main() { while(scanf("%d",&n)!=EOF) { if(!n) break; memset(a,0,sizeof(a)); for(int i=0;i<n;i++) { scanf("%d",&st[i].num); st[i].pos=i; } sort(st,st+n,cmp); for(int i=0;i<n;i++) { reflect[st[i].pos]=i+1; } long long ans=0; for(int i=0;i<n;i++) { int tem=sum(reflect[i]); ans+=i-tem; add(reflect[i],1); } cout<<ans<<endl; } return 0; }
相关文章推荐
- 树状数组 离散化 求逆序数POJ 2299Ultra-QuickSort解题报告
- poj 2299 Ultra-QuickSort (树状数组+离散化)
- POJ2299 Ultra-QuickSort(树状数组求逆序数+离散化)
- POJ 2299 Ultra-QuickSort (树状数组 + 离散化)
- POJ 2299 Ultra-QuickSort (树状数组求逆序数 || 线段树 +离散化)
- poj 2299 Ultra-QuickSort(树状数组求逆序数+离散化)
- POJ:2299 Ultra-QuickSort(树状数组+离散化+技巧+求逆序对)
- poj2299 Ultra-QuickSort 树状数组 + 离散化
- POJ 2299 Ultra-QuickSort(归并排序,树状数组,离散化)
- POJ 2299 Ultra-QuickSort (树状数组 + 离散化)
- poj2299 Ultra-QuickSort(树状数组求逆序数,离散化)
- POJ 2299 Ultra-QuickSort(离散化+树状数组求逆序对)
- POJ 2299 Ultra-QuickSort(树状数组+离散化)
- poj 2299 Ultra-QuickSort 树状数组求逆序数 离散化
- POJ 2299 Ultra-QuickSort (树状数组求逆序数+离散化)
- POJ 2299 Ultra-QuickSort(树状数组+离散化)
- POJ Ultra-QuickSort (树状数组+离散化)
- POJ 2299 Ultra-QuickSort(树状数组+离散化 或 归并排序求逆序)
- 【Poj】-2299-Ultra-QuickSort(树状数组,离散化, 好)
- POJ 2299 Ultra-QuickSort(树状数组+离散化)