POJ 2299 Ultra-QuickSort
2012-07-17 20:18
239 查看
思路:
利用归并排序求逆序数
利用归并排序求逆序数
#include<stdio.h> #define MAX 500002 int s[MAX]; int t[MAX]; __int64 count; void mergeArray(int first,int mid,int last) { int i,j,k=0; i=first;j=mid+1; while(i<=mid&&j<=last) { if(s[i]>s[j]) { t[k++]=s[j++]; count+=mid-i+1; } else t[k++]=s[i++]; } while(i<=mid) t[k++]=s[i++]; while(j<=last) t[k++]=s[j++]; for(i=0;i<k;i++) s[first+i]=t[i]; } void mergeSort(int first,int last) { int mid; if(first<last) { mid=(first+last)/2; mergeSort(first,mid); mergeSort(mid+1,last); mergeArray(first,mid,last); } } int main() { int n,i; while(scanf("%d",&n)!=EOF&&n!=0) { count=0; for(i=0;i<n;i++) scanf("%d",&s[i]); mergeSort(0,n-1); printf("%I64d\n",count); } return 0; }
相关文章推荐
- poj 2299 c++:Ultra-QuickSort
- Poj 2299 Ultra-QuickSort【逆序数】
- POJ 2299 && ZOJ 2386 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 2299 Ultra-QuickSort
- Poj 2299 Ultra-QuickSort
- POJ:2299 Ultra-QuickSort(树状数组+离散化+技巧+求逆序对)
- POJ 2299 Ultra-QuickSort