#include "shoes.h"
#include <bits/stdc++.h>
using namespace std;
vector<int> seg;
void build(int id,int l,int r){
if(l==r){
seg[id]=1;
return;
}
int m=(l+r)/2;
build(id*2,l,m);
build(id*2+1,m+1,r);
seg[id]=seg[id*2]+seg[id*2+1];
}
void update(int id,int l,int r,int x){
if(l==r){
seg[id]=0;
return;
}
int m=(l+r)/2;
if(x<=m){
update(id*2,l,m,x);
}else{
update(id*2+1,m+1,r,x);
}
seg[id]=seg[id*2]+seg[id*2+1];
}
int query(int id,int l,int r,int x){
if(r<=x){
return seg[id];
}else if(l>x){
return 0;
}
int m=(l+r)/2;
return query(id*2,l,m,x)+query(id*2+1,m+1,r,x);
}
long long count_swaps(vector<int> s) {
long long n=s.size()/2,ans=0,l,r;
queue<int> pos,neg;
for(int i=0;i<2*n;i++){
if(s[i]>0){
pos.push(i);
}else{
neg.push(i);
}
}
seg.resize(8*n);
build(1,0,2*n-1);
for(int i=0;i<n;i++){
l=query(1,0,2*n-1,neg.front())-1;
r=query(1,0,2*n-1,pos.front())-1;
if(l<r){
r--;
}
ans+=l+r;
update(1,0,2*n-1,neg.front());
update(1,0,2*n-1,pos.front());
neg.pop();pos.pop();
}
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... |