Run ID | 作者 | 问题 | 语言 | 测评结果 | 分数 | 时间 | 内存 | 代码长度 | 提交时间 |
---|---|---|---|---|---|---|---|---|---|
136630 | 吴晨曦 | 求逆序对数 | C++ | 通过 | 100 | 0 MS | 260 KB | 665 | 2024-03-09 11:14:28 |
#include <bits/stdc++.h> using namespace std; const int N = 1e6 + 005; int a[N], b[N]; long long ans; void mergeSort(int s, int t) { if (s == t) return; int mid = s + t >> 1; mergeSort(s, mid); mergeSort(mid + 1, t); int i = s, j = mid + 1, k = s; while (i <= mid && j <= t) if (a[i] <= a[j]) b[k++] = a[i++]; else b[k++] = a[j++], ans += (1LL * mid - i + 1); while (i <= mid) b[k++] = a[i++]; while (j <= t) b[k++] = a[j++]; for (int i = s; i <= t; i++) a[i] = b[i]; } int main() { int n; cin >> n; for (int i = 1; i <= n; i++) cin >> a[i]; mergeSort (1, n); cout << ans << endl; return 0; }