#include "shoes.h"
#include <bits/stdc++.h>
using namespace std;
using ll = long long;
long long count_swaps(std::vector<int> s) {
int n=s.size()/2;
ll ans=0;
vector<vector<int>>l(n),r(n);
for(int i=2*n-1;i>=0;i--){
if(s[i]>0){
r[s[i]-1].push_back(i);
}else{
l[-s[i]-1].push_back(i);
}
}
priority_queue<pair<int,int>,vector<pair<int,int>>,greater<pair<int,int>>>pq;
for(int i=0;i<n;i++){
if(!l[i].empty()){
pq.push({l[i].back()+abs(r[i].back()-1)+(l[i]>r[i]),i});
}
}
vector<int>v;
for(int i=0;i<n;i++){
pair<int,int>p=pq.top();
pq.pop();
int li=l[p.second].back(),ri=r[p.second].back();
li+=v.end()-lower_bound(v.begin(),v.end(),li);
ri+=v.end()-lower_bound(v.begin(),v.end(),ri);
v.push_back(l[p.second].back());
v.push_back(r[p.second].back());
l[p.second].pop_back();r[p.second].pop_back();
if(!l[p.second].empty()){
pq.push({l[p.second].back()+abs(r[p.second].back()-1)+(l[p.second]>r[p.second]),p.second});
}
if(li==2*i+1&&ri==2*i){
ans+=1;
}else ans+=abs(li-2*i)+abs(ri-2*i-1)+(li>ri);
}
return ans;
}
# | 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... |