#include <bits/stdc++.h>
using namespace std;
int64_t count_swaps(vector<int> S){
int n=S.size();
int swaps=0;
vector<pair<priority_queue<int,vector<int>,greater<>>,priority_queue<int,vector<int>,greater<>>>> pqs(n+1);
vector<bool> skip(n+1);
for (int i=0;i<n;i++){
if (S[i]<0){
//.first
pqs[S[i]*-1].first.push(i);
} else {
//.second
pqs[S[i]].second.push(i);
}
}
for (int i=0;i<n;i++){
if (skip[i]) continue;
int now=i;
int next;
if (S[i]<0){
next=pqs[S[i]*-1].second.top();
pqs[S[i]*-1].second.pop();
pqs[S[i]*-1].first.pop();
} else {
next=pqs[S[i]].first.top();
pqs[S[i]].first.pop();
pqs[S[i]].second.pop();
}
skip[now]=true;
skip[next]=true;
swaps+=next-now-1;
if (S[i]>0) swaps++;
}
return swaps;
}
# | 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... |