#include <bits/stdc++.h>
using namespace std;
#define mod 1000000007
#define maxn 200005
#define f first
#define s second
#define ll long long
#define pb(x) push_back(x)
int bit[maxn];
int get(int i, int n){
int j=i, x=0;
while(j>0){
x+=bit[j];
j-=j&(-j);
}
return x;
}
void upd(int i, int n){
int j=i;
while(j<=n){
bit[j]++;
j+=j&(-j);
}
}
int b[maxn];
int64_t count_swaps(vector<int> v){
int n=(int)v.size();
queue<int> s[2][n+1];
long long ans=0;
for(int i=0; i<n; i++){
s[(v[i]>0)][abs(v[i])].push(i);
}
for(int i=0; i<n; i++){
if(b[i])continue;
int x=s[(v[i]>0)][abs(v[i])].front(),y=s[!(v[i]>0)][abs(v[i])].front();
b[y]=1;s[(v[i]>0)][abs(v[i])].pop();s[!(v[i]>0)][abs(v[i])].pop();
ans+=y-x-1-get(y, n)+get(x, n)+(v[i]>0);
upd(y, n);
}
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... |