Ultra-QuickSort
poj: 2299 http://poj.org/problem?id=2299
long long sum
写成
int sum
结果错误,再哭一次…
#include <cstdio> #include <cstring> #include <iostream> using namespace std; const int maxn = 500005; int a[maxn]; int aux[maxn]; int n; long long sum; void merge(int l, int mid, int r) { int i = l; int j = mid+1; int end1 = mid; int end2 = r; for (int t = l; t <= r; t++) { aux[t] = a[t]; } for (int t = l; t <= r; t++) { if (i > end1) { a[t] = aux[j++]; } else if (j > end2) { a[t] = aux[i++]; } else if (aux[i] <= aux[j]) { a[t] = aux[i++]; } else { sum += end1-i+1; a[t] = aux[j++]; } } } void msort(int l, int r) { if (l < r) { int mid = (l + r) / 2; msort(l, mid); msort(mid+1, r); merge(l, mid, r); } } int main(void) { int n; while (scanf("%d", &n) && n != 0) { for (int i = 0; i < n; i++) { scanf("%d", &a[i]); } sum = 0; msort(0, n-1); cout << sum << endl; } return 0; }