#include<bits/stdc++.h>
#include "shoes.h"
using namespace std;
#define ll int
ll n,f[800005],dk[100005],d;
queue<ll>vt[100005],vt1[100005];
long long ans;
bool kt[800005];
void update(ll id,ll l,ll r,ll u,ll v)
{
if(l>u||r<u)
return;
if(l==r)
{
f[id]+=v;
return;
}
ll mid=(l+r)/2;
update(id*2,l,mid,u,v);
update(id*2+1,mid+1,r,u,v);
f[id]=f[id*2]+f[id*2+1];
}
ll getsum(ll id,ll l,ll r,ll u,ll v)
{
if(l>v||r<u)
return 0;
if(l>=u&&r<=v)
return f[id];
ll mid=(l+r)/2;
return getsum(id*2,l,mid,u,v)+getsum(id*2+1,mid+1,r,u,v);
}
long long count_swaps(vector<int>s)
{
n=s.size()/2;
for(int i=1;i<=n;i++)
{
while(!vt[s[i]].empty())
vt[s[i]].pop();
while(!vt1[s[i]].empty())
vt1[s[i]].pop();
}
ans=0;
for(int i=0;i<s.size();i++)
if(s[i]<0)
vt[-s[i]].push(i);
else
vt1[s[i]].push(i);
for(int i=0;i<s.size();i++)
if(kt[i]==0)
{
if(s[i]>0)
{
d=vt[s[i]].front();
vt[s[i]].pop();
vt1[s[i]].pop();
ans+=d-i-getsum(1,0,n*2-1,i,d-1);
kt[d]=1;
update(1,0,2*n-1,d,1);
}
else
{
d=vt1[-s[i]].front();
vt1[-s[i]].pop();
vt[-s[i]].pop();
ans+=d-i-1-getsum(1,0,n*2-1,i,d-1);
kt[d]=1;
update(1,0,2*n-1,d,1);
}
}
return ans;
}
//int main()
//{
// cout<< count_swaps({2, 1, -1, -2});
//}
# | 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... |