#include "shoes.h"
#include "bits/stdc++.h"
using namespace std;
#define ll long long
struct fentree{
vector<int>fen;
int s;
void init(int n){
fen.resize(n+1,0);
s=n;
}
void edit(int i,int x){
while(i<=s){
fen[i]+=x;
i+=(i&-i);
}
}
int sum(int r){
int ans=0;
while(r>0){
ans+=fen[r];
r-=(r&-r);
}
return ans;
}
};
ll count_swaps(vector<int> a) {
int n=a.size()/2;
a.insert(begin(a),0);
ll ans=0;
map<int,int>d;
vector<int>co(2*n+1,0);
map<int,vector<int>>ind;
for(int i=1;i<=2*n;i++) ind[a[i]].push_back(i);
for(int i=1;i<=2*n;i++){
if(ind[a[i]].back()>ind[a[i]][0]){
sort(rbegin(ind[a[i]]),rend(ind[a[i]]));
}
}
fentree fen;
fen.init(2*n);
for(int i=1;i<=2*n;i++)
fen.edit(i,1);
for(int i=1;i<=2*n;i++){
int x=a[i],y=-a[i];
if(co[i]) continue;
if(ind[x].size()==0 or ind[y].size()==0){
cout<<i<<" 1234\n";
return 1ll;
}
co[i]=1;
fen.edit(i,-1);
int f=0;
if(x>0) f=1;
int in=ind[y].back();
f+=max(0,fen.sum(in-1)-fen.sum(i));
co[in]=1;
fen.edit(in,-1);
ind[y].pop_back();
ans+=f;
ind[x].pop_back();
}
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... |