通过代码:
#include <bits/stdc++.h> #define LL long long using namespace std; LL a[100001], b[100001], n, sum; void msort(int l, int r) { if(l == r) return; LL m = (l + r) / 2; msort(l, m); msort(m + 1, r); LL i = l, j = m + 1, k = l; 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 ++]; for(LL i = l; i <= r; i ++) a[i] = b[i]; } int main() { scanf("%lld", &n); for(LL i = 1; i <= n; i ++) scanf("%lld", &a[i]); msort(1, n); printf("%lld", sum); return 0; }
1311:【例2.5】求逆序对
最新推荐文章于 2024-02-15 09:26:42 发布