#include<iostream>
#include<vector>
#include<queue>
#include<set>
#include "shoes.h"
using namespace std;
const int MAX_N=3e5+5;
deque<int>le,re[MAX_N];
int tree[MAX_N];
int N;
void Update(int pos)
{
pos++;
for(;;)
{
if(pos>N)break;
tree[pos]++;
pos+=((pos)&(-pos));
}
}
int Find(int pos)
{
int res=0;
pos++;
for(;;)
{
if(pos<1)break;
res+=tree[pos];
pos-=((pos)&(-pos));
}
return res;
}
int pos[MAX_N];
long long count_swaps(std::vector<int> s)
{
N=2*s.size();
for(int i=0;i<s.size();i++)
{
pos[i]=i;
if(s[i]<0)le.push_back(i);
else re[s[i]].push_back(i);
}
long long ans=0;
int col;
for(int i=0;i<s.size();i++)
{
int wh=i%2;
if(wh==0)
{
ans+=pos[le.front()]-i;
col=-s[le.front()];
for(int j=le.front()-1;j>=0;j--)pos[j]++;
le.pop_front();
}
else
{
ans+=pos[re[col].front()]-i;
for(int j=re[col].front()-1;j>=0;j--)pos[j]++;
re[col].pop_front();
}
}
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... |