Lang:G++
Edit12345678910111213141516171819202122232425262728293031#include <iostream>#include <algorithm>using namespace std;long long solve(unsigned int *a, int first, int last) {if (first >= last) return 0;int mid = (first + last) / 2;long long ansl = solve(a, first, mid);long long ansr = solve(a, mid + 1, last);unsigned int b[last - first + 1];int i = first, j = mid + 1;int k = 0;long long count = ansl + ansr;while (i <= mid && j <= last) {if (a[i] <= a[j]) b[k ++] = a[i ++];else { // if (a[i] > a[j]) {count += (long long)(mid + 1 - i);b[k ++] = a[j ++];}}while (i <= mid) b[k ++] = a[i ++];while (j <= last) b[k ++] = a[j ++];copy(b, b + last - first + 1, a + first);return count;}int main() {int N;cin >> N;unsigned int a[N];