#include #include #include #include #include #include #include using namespace std; using namespace std; long long my_merge(vector&v, vector &tmp, int L, int mid, int R) { int i = L, j = mid; int idx = L; long long inversions = 0; while(i <= mid - 1 and j <= R) { if(v[i] <= v[j]) { tmp[idx++] = v[i++]; } else { tmp[idx++] = v[j++]; inversions += mid - i; } } while(i <= mid - 1) { tmp[idx++] = v[i++]; } while(j <= R) { tmp[idx++] = v[j++]; } for(int id = L; id <= R; id++) { v[id] = tmp[id]; } return inversions; } long long merge_sort(vector &v, vector &tmp, int L, int R) { int mid = (L + R) / 2; long long inversions = 0; if(R > L) { inversions += merge_sort(v, tmp, L, mid); inversions += merge_sort(v, tmp, mid + 1, R); inversions += my_merge(v, tmp, L, mid + 1, R); } return inversions; } int main() { int n; cin >> n; vector v(n); for(int i = 0; i < n; i++) { cin >> v[i]; } vector tmp(n); cout << merge_sort(v, tmp, 0, n - 1) << endl; return 0; }