poj 排序相关之2299 Ultra-QuickSort
2017-06-26 15:16
344 查看
poj 排序相关之2299 Ultra-QuickSort
Accepted 3660K 391MS
最需要注意的是long long的输出是printf(“%lld”,ans);
归并求逆序对的就直接能过,题目实在是没看懂
Accepted 3660K 391MS
最需要注意的是long long的输出是printf(“%lld”,ans);
归并求逆序对的就直接能过,题目实在是没看懂
#include<iostream> #include<string> #include<cstdio> #include<cstring> //#include<math.h> #include<algorithm> #include<vector> #include<map> #define MAXNUM 500010 #define LL long long using namespace std; int n; int a[MAXNUM], tmp[MAXNUM]; LL ans; void Merge(int l, int m, int r) { int i = l; int j = m + 1; int k = l; while (i <= m && j <= r) { if (a[i] > a[j]) { tmp[k++] = a[j++]; ans += m - i + 1; } else { tmp[k++] = a[i++]; } } while (i <= m) tmp[k++] = a[i++]; while (j <= r) tmp[k++] = a[j++]; for (int i = l; i <= r; i++) a[i] = tmp[i]; } void Merge_sort(int l, int r) { if (l < r) { int m = (l + r) >> 1; Merge_sort(l, m); Merge_sort(m + 1, r); Merge(l, m, r); } } int main(void) { //freopen("1.txt", "r", stdin); int i, j, k; while (scanf("%d", &n) != EOF&&n != 0) { for (i = 0; i < n; i++) scanf("%d", &a[i]); ans = 0; Merge_sort(0, n - 1); printf("%lld\n", ans); } }
相关文章推荐
- POJ 2299 Ultra-QuickSort 【归并排序求逆序数 OR 树状数组求逆序数】
- 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(树状数组)
- poj 2299 Ultra-QuickSort(线段树)
- POJ - 2299 Ultra-QuickSort(树状数组)
- poj 2299 Ultra-QuickSort
- poj 2299 Ultra-QuickSort(树状数组求逆序数)
- poj 2299 Ultra-QuickSort (离散化,树状数组,逆序对)