| # | Time | Username | Problem | Language | Result | Execution time | Memory |
|---|---|---|---|---|---|---|---|
| 1350645 | ttparin_ | Arranging Shoes (IOI19_shoes) | C++20 | 0 ms | 0 KiB |
#include "shoes.h"
#include<bits/stdc++.h>
using namespace std;
#define int long long
int a[200010];
int idx[200010];
queue<int> q[200010];
int n;
int dp[200010];
int read(int idx){
int sumi=0;
while(idx>0){
sumi+=dp[idx];
idx-=idx&-idx;
}
return sumi;
}
void update(int idx){
while(idx<=n){
dp[idx]++;
idx+=idx&-idx;
}
}
int count_swaps(vector<int> s) {
int ans=0;
for(auto g:s){
n++;
if(g<0){
g=100000-g;
if(q[g-100000].empty()==0){
a[q[g-100000].front()]=n;
a[n]=q[g-100000].front();
q[g-100000].pop();
}
else{
q[g].push(n);
}
}
else{
if(q[g+100000].empty()==0){
a[q[g+100000].front()]=n;
a[n]=q[g+100000].front();
q[g+100000].pop();
}
else{
q[g].push(n);
}
}
}
for(int i=1;i<=n;i++){
if(a[i]>i){
cout<<i<<a[i]<<endl;
int x=read(a[i]-1)-read(i);
ans+=a[i]-i-1-x;
if(s[i-1]>0){ans++;}
update(i);
update(a[i]);
}
}
return ans;
}
