Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- vector<int> c1, c2;
- void count_inv(int l, int r, ll &cnt) {
- if (l + 1 == r) return;
- int m = l + r >> 1;
- count_inv(l, m, cnt);
- count_inv(m, r, cnt);
- int i = l, j = m;
- for (int k = l; k < r; ++k) {
- if (i == m) {
- c2[k] = c1[j];
- ++j;
- } else if (j == r) {
- c2[k] = c1[i];
- cnt += j - m;
- ++i;
- } else if (c1[i] < c1[j]) {
- c2[k] = c1[i];
- cnt += j - m;
- ++i;
- } else {
- c2[k] = c1[j];
- ++j;
- }
- }
- for (int k = l; k < r; ++k) {
- c1[k] = c2[k];
- }
- }
- int main() {
- int n;
- cin >> n;
- vector<int> a(n);
- cin >> a;
- c1 = c2 = a;
- ll ans = 0;
- count_inv(0, n, ans);
- cout << ans << '\n';
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement