10810 - Ultra-QuickSort(求逆序数)
来源:互联网 发布:手机打网络电话软件 编辑:程序博客网 时间:2024/06/06 16:54
该题实际上就是求所给排列的逆序数个数。 因为最快的排序方法一定是先将最大的数放到最后,再将第二大的数放到最后...... 该贪心算法很容易证明。
方法有两种: 归并排序或者树状数组(线段树)。
下面用归并排序实现的:
细节参见代码:
#include<bits/stdc++.h>using namespace std;typedef long long ll;const ll INF = 1000000000;const int maxn = 500000+5;int n,m,a[maxn],b[maxn];ll cnt = 0;void merge_sort(int* A, int x, int y, int *T) { if(y - x > 1) { int m = x + (y-x)/2; int p = x, q = m, i = x; merge_sort(A, x, m, T); merge_sort(A, m, y, T); while(p < m || q < y) { if(q >= y || (p < m && A[p] <= A[q])) T[i++] = A[p++]; else { T[i++] = A[q++]; cnt += m - p; } } for(i = x; i < y; i++) A[i] = T[i]; }}int main() { while(~scanf("%d",&n)&&n) { for(int i=1;i<=n;i++) scanf("%d",&a[i]); cnt = 0; merge_sort(a,1,n+1,b); printf("%lld\n",cnt); } return 0;}
0 0
- 10810 - Ultra-QuickSort(求逆序数)
- 10810 - Ultra-QuickSort(归并排序求逆序数)
- uva 10810 - Ultra-QuickSort(归并求逆序数)
- Ultra-QuickSort(逆序数)
- POJ 2299 Ultra-QuickSort(归并排序求逆序数)
- PKU Ultra-QuickSort (树状数组求逆序数)
- POJ2299 Ultra-QuickSort(树状数组求逆序数)
- 复习--Ultra-QuickSort(归并排序求逆序数)
- Ultra-QuickSort(离散化+树状数组求逆序数)
- poj 2299 Ultra-QuickSort(树状数组 / 求逆序数)
- 2299 Poj 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 归并排序求逆序数
- Ultra-QuickSort poj2299 (归并排序 求逆序数对)
- UI课程07 UIScrollView、UIPageControl
- 《大型网络技术架构》笔记 2
- 第八周第二天
- C++Primer第五版 7.1.4节练习
- 破解限制单机上网方法
- 10810 - Ultra-QuickSort(求逆序数)
- uvalive 3644 X-Plosives
- Android之Fragment(碎片)
- UE4 Material - How To Use Fresnel in your Materials
- /proc/modules, /proc/devices, /dev
- 1215 七夕节
- android之音频的播放和录制(MediaPlayer,SoundPool,MediaRecorder)
- ios数据初级持久化 存储复杂对象
- Java初体验(二)