CCCPaste

Untitled

#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;
}