#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({abs(i),p1});
p1+=2;
}
else{
ord.push_back({i,p2});
p2+=2;
}
}
// for(auto i:)
return countInversions(ord);
}
// int main(){
// cout<<count_swaps({-1,1,-1,1})<<endl;
// }
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |