| # | Time | Username | Problem | Language | Result | Execution time | Memory | 
|---|---|---|---|---|---|---|---|
| 1285808 | muhammad-mutahir | Arranging Shoes (IOI19_shoes) | C++20 | 0 ms | 0 KiB | 
#include "shoes.h"
#include <bits/stdc++.h>
using namespace std;
long long mergeAndCount(vector<pair<int, int>>& arr, int left, int mid, int right) {
    vector<pair<int, int>> temp;
    long long inversions = 0;
    int i = left, j = mid + 1;
    while (i <= mid && j <= right) {
        if (arr[i] <= arr[j]) { 
            temp.push_back(arr[i++]);
        } else {
            temp.push_back(arr[j++]);
            inversions += (mid - i + 1);
        }
    }
    while (i <= mid) {
        temp.push_back(arr[i++]);
    }
    while (j <= right) {
        temp.push_back(arr[j++]);
    }
    for (int k = 0; k < temp.size(); ++k) {
        arr[left + k] = temp[k];
    }
    return inversions;
}
long long mergeSortAndCount(vector<pair<int, int>>& arr, int left, int right) {
    long long inversions = 0;
    if (left < right) {
        int mid = left + (right - left) / 2;
        inversions += mergeSortAndCount(arr, left, mid);
        inversions += mergeSortAndCount(arr, mid + 1, right);
        inversions += mergeAndCount(arr, left, mid, right);
    }
    return inversions;
}
long long countInversions(vector<pair<int, int>>& arr) {
    return mergeSortAndCount(arr, 0, arr.size() - 1);
}
long long count_swaps(vector<int> s) {
	vector<pair<int,int>>ord;
	int p1 = 1;
	int p2 = 2;
	for(int i :s){
		if(i<=0){
			ord.push_back({i,p1});
			p1+=2;
		}
		else{
			ord.push_back({i,p2});
			p2+=2;
		}
		
		
	}
	return countInversion(ord);
}
