2299 Ultra-QuickSort(逆序数)
2011-11-04 08:55
316 查看
题意:求给定数列的逆序数
#include<stdio.h> #include<string.h> #include<iostream> #include<algorithm> using namespace std; #define maxN 500010 int key[maxN],a[maxN]; long long num; void fun(int l,int r) { if(l==r)return ; int mid=(l+r)/2; fun(l,mid);fun(mid+1,r); int st=l,ls=l,rs=mid+1; while(st<=r&&ls<=mid&&rs<=r) { if(key[ls]>key[rs]){ a[st++]=key[rs++]; num+=mid-ls+1; }else a[st++]=key[ls++]; } while(ls<=mid) a[st++]=key[ls++]; while(rs<=r) a[st++]=key[rs++]; for(int i=l;i<=r;i++) key[i]=a[i]; } int main() { int n; while(scanf("%d",&n)&&n) { num=0; for(int i=1;i<=n;i++) scanf("%d",&key[i]); fun(1,n); printf("%lld\n",num); } }
相关文章推荐
- 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 2299 Ultra-QuickSort(线段树,离散化求逆序数)
- poj 2299 Ultra-QuickSort 求逆序数 树状数组解法
- poj 2299 Ultra-QuickSort (归并排序,逆序数)
- poj(2299)——Ultra-QuickSort(归并排序求逆序数)
- POJ 2299 Ultra-QuickSort(树状数组求逆序数)
- poj 2299 Ultra-QuickSort (归并排序 求逆序数)
- POJ训练计划2299_Ultra-QuickSort(归并排序求逆序数)
- poj 2299 Ultra-QuickSort 树状数组求逆序数
- Poj 2299 Ultra-QuickSort (归排求逆序数)