This submission is migrated from previous version of oj.uz, which used different machine for grading. This submission may have different result if resubmitted.
#include<bits/stdc++.h>
#include"shoes.h"
using namespace std;
int tree[400005],flag[400005];
queue<int>pos[2][100005];
/*void push(int v,int l,int r){
if(l!=r){
flag[v<<1]+=flag[v];
flag[(v<<1)+1]+=flag[v];
}
tree[v]+=flag[v]*(r-l+1);
flag[v]=0;
}
int get(int v,int l,int r,int ql,int qr){
if(r<ql||qr<l)return 0;
push(v,l,r);
if(ql<=l&&r<=qr)return tree[v];
int mid=(l+r)>>1;
return get(v<<1,l,mid,ql,qr)+get((v<<1)+1,mid+1,r,ql,qr);
}
void update(int v,int l,int r,int ql,int qr,int val){
if(r<ql||qr<l)return;
push(v,l,r);
if(ql<=l&&r<=qr){
flag[v]+=val;
push(v,l,r);
return;
}
int mid=(l+r)>>1;
update(v<<1,l,mid,ql,qr,val);
update((v<<1)+1,mid+1,r,ql,qr,val);
tree[v]=tree[v<<1]+tree[(v<<1)+1];
}*/
int coef[100005];
void update(int v,int l,int r,int ql,int qr,int val){
for(int i=ql;i<=qr;i++)coef[i]+=val;
}
int get(int v,int l,int r,int ql,int qr){
return coef[ql];
}
long long count_swaps(vector<int>v){
long long cnt=0;
int q=0,i=0,n=v.size();
for(i=1;i<n;i+=2)pos[v[i]>0][abs(v[i])].push(i);
for(i=0;i<n;i+=2){
q=pos[v[i]<0][abs(v[i])].front();
pos[v[i]<0][abs(v[i])].pop();
cnt+=abs(i-(get(1,1,n,q+1,q+1)+q));
if(v[i]<0)cnt--;
update(1,1,n,i+2,q,1);
}
return cnt;
}
# | 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... |