#include "shoes.h"
#include <bits/stdc++.h>
using namespace std;
using ll = long long;
//brute force
struct segtree{
int n;
vector<int>tree;
segtree(int n):n(n),tree(2*n,0){}
void update(int pos,int val){
tree[pos+=n]=val;
for(pos/=2;pos>0;pos/=2){
tree[pos]=tree[2*pos]+tree[2*pos^1];
}
}
int sum(int l,int r){
int ans=0;
for(l+=n,r+=n;l<r;l/=2,r/=2){
if(l%2){
ans+=tree[l++];
}
if(r%2){
ans+=tree[--r];
}
}
return ans;
}
};
long long count_swaps(std::vector<int> s) {
int n=s.size()/2;
ll ans=1e18;
vector<int>v;
for(int i:s){
if(i>0)v.push_back(i-1);
}
sort(v.begin(),v.end());
vector<vector<int>>l1(n),r1(n);
for(int i=2*n-1;i>=0;i--){
if(s[i]>0){
r1[s[i]-1].push_back(i);
}else{
l1[-s[i]-1].push_back(i);
}
}
do{
segtree seg(2*n);
ll cnt=0;
vector<vector<int>>l(l1),r(r1);
for(int i=0;i<n;i++){
int li=l[v[i]].back(),ri=r[v[i]].back();
li+=seg.sum(li,2*n);
ri+=seg.sum(ri,2*n);
seg.update(l[v[i]].back(),1);
seg.update(r[v[i]].back(),1);
l[v[i]].pop_back();r[v[i]].pop_back();
if(li==2*i+1&&ri==2*i){
cnt+=1;
}else cnt+=abs(li-2*i)+abs(ri-2*i-1)+(li>ri);
}
ans=min(ans,cnt);
}while(next_permutation(v.begin(),v.end()));
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... |