#include<bits/stdc++.h>
using namespace std;
using ll=long long;
const int N=1e5+2;
set<int>ps[N],ng[N];
int b[N<<1],bit[N<<1],n;
int get(int k){
int s=0;++k;
while(k>0){
s+=bit[k];
k-=k&-k;
}
return s;
}
void add(int k,int x){
++k;
while(k<=n){
bit[k]+=x;
k+=k&-k;
}
}
void reset(){
for(int i=0;i<=n;++i){
if(i<N)ps[i].clear();
if(i<N)ng[i].clear();
bit[i]=0;
b[i]=0;
}
}
ll count_swaps(vector<int>a){
n=a.size();
for(int i=0;i<n;++i){
if(a[i]>0)ps[a[i]].insert(i);
else ng[-a[i]].insert(i);
}
ll ans=0;
for(int i=0,j;i<n;++i){
if(b[i])continue;
if(a[i]>0){
j=*ng[a[i]].begin();
ng[a[i]].erase(ng[a[i]].begin());
ps[a[i]].erase(ps[a[i]].find(i));
}
if(a[i]<0){
j=*ps[-a[i]].begin();
ps[-a[i]].erase(ps[-a[i]].begin());
ng[-a[i]].erase(ng[-a[i]].find(i));
--ans;
}
ans+=j-i-(get(j)-get(i-1));
b[i]=b[j]=1;
add(i,1);
add(j,1);
}
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... |