POJ 2299 Ultra-QuickSort ---归并排序 求逆序
2013-07-28 19:24
274 查看
归并排序 的模板。
能求逆序。。。。
能求逆序。。。。
#include<stdio.h> #include<string.h> int n; long long a[500005],b[500005]; long long sum; void merge(int l,int m,int r) { int i=l,j=m+1,k=0; while(i<=m && j<=r) { if(a[i]<=a[j]) b[k++]=a[i++]; else{ b[k++]=a[j++]; sum+=m-i+1;//这个就能求逆序了。。自己理解一下。。 } } while(i<=m) b[k++]=a[i++]; while(j<=r) b[k++]=a[j++]; k=0; for(i=l;i<=r;i++) a[i]=b[k++]; } void mergesort(int a,int b) { if(a==b) return ; int m=(a+b)/2; mergesort(a,m); mergesort(m+1,b); merge(a,m,b); } int main() { int i,j,k; while(scanf("%d",&n),n){ for(i=1;i<=n;i++) scanf("%lld",&a[i]); sum=0; mergesort(1,n); printf("%lld\n",sum); } }
相关文章推荐
- 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 求逆序对,树状数组和归并排序
- (应用排序算法编程7.2.2)POJ 2299 Ultra-QuickSort(使用归并排序来计算逆序对的个数)
- poj 2299 Ultra-QuickSort——归并排序求逆序数,线段树离散化
- poj 2299 Ultra-QuickSort(归并排序求逆序对)
- POJ 2299 Ultra-QuickSort(树状数组+离散化 或 归并排序求逆序)
- poj 2299 Ultra-QuickSort 【线段树 or 线段树+lazy or 树状数组 or 归并排序】 求逆序对
- Ultra-QuickSort (poj 2299 归并排序 || 树状数组 求逆序对)
- POJ_2299_Ultra-quicksort_归并排序、逆序数
- poj 2299 Ultra-QuickSort【归并排序求逆序数】
- POJ 2299 Ultra-QuickSort 【归并排序 || 树状数组求逆序对数】
- 【POJ】2299 Ultra-QuickSort(逆序对)