#include <bits/stdc++.h>
using namespace std;
vector<int> vec;
int n;
int recur(int l, int r) {
int ans = 0;
if (l + 1 >= r) {
return ans;
}
int mid = (l + r) / 2;
ans += recur(l, mid);
ans += recur(mid, r);
// Debugging output
cout << l << " " << r << endl;
// Count inversions
int i = l, j = mid;
while (i < mid && j < r) {
if (vec[i] <= vec[j]) {
i++;
} else {
ans += mid - i;
j++;
}
}
inplace_merge(vec.begin() + l, vec.begin() + mid, vec.begin() + r);
return ans;
}
int main() {
cin >> n;
vec.resize(n);
for (int i = 0; i < n; i++) {
cin >> vec[i];
}
cout << recur(0, n) << endl;
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7Cgp2ZWN0b3I8aW50PiB2ZWM7CmludCBuOwoKaW50IHJlY3VyKGludCBsLCBpbnQgcikgewogICAgaW50IGFucyA9IDA7CiAgICBpZiAobCArIDEgPj0gcikgewogICAgICAgIHJldHVybiBhbnM7CiAgICB9CiAgICBpbnQgbWlkID0gKGwgKyByKSAvIDI7CiAgICBhbnMgKz0gcmVjdXIobCwgbWlkKTsKICAgIGFucyArPSByZWN1cihtaWQsIHIpOwogICAgCiAgICAvLyBEZWJ1Z2dpbmcgb3V0cHV0CiAgICBjb3V0IDw8IGwgPDwgIiAiIDw8IHIgPDwgZW5kbDsKICAgIAogICAgLy8gQ291bnQgaW52ZXJzaW9ucwogICAgaW50IGkgPSBsLCBqID0gbWlkOwogICAgd2hpbGUgKGkgPCBtaWQgJiYgaiA8IHIpIHsKICAgICAgICBpZiAodmVjW2ldIDw9IHZlY1tqXSkgewogICAgICAgICAgICBpKys7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgYW5zICs9IG1pZCAtIGk7CiAgICAgICAgICAgIGorKzsKICAgICAgICB9CiAgICB9CgogICAgaW5wbGFjZV9tZXJnZSh2ZWMuYmVnaW4oKSArIGwsIHZlYy5iZWdpbigpICsgbWlkLCB2ZWMuYmVnaW4oKSArIHIpOwogICAgcmV0dXJuIGFuczsKfQoKaW50IG1haW4oKSB7CiAgICBjaW4gPj4gbjsKICAgIHZlYy5yZXNpemUobik7CiAgICBmb3IgKGludCBpID0gMDsgaSA8IG47IGkrKykgewogICAgICAgIGNpbiA+PiB2ZWNbaV07CiAgICB9CiAgICBjb3V0IDw8IHJlY3VyKDAsIG4pIDw8IGVuZGw7Cn0K