| # | Time | Username | Problem | Language | Result | Execution time | Memory |
|---|---|---|---|---|---|---|---|
| 1307765 | lufychop | Arranging Shoes (IOI19_shoes) | C++20 | 0 ms | 0 KiB |
#include <bits/stdc++.h>
using namespace std;
long long n;
// vector<long long> seg(1000000,0);
map<long long,deque<long long>> mp;
long long count_swaps(vector<int> s)
{
n=s.size();
long long ans=0;
long long LL=0,RR=n;
for(int i=0;i<n;i++)
{
if(mp[s[i]].empty())
{
mp.insert({s[i],{i+1}});
}
else
{
mp[s[i]].push_back(i+1);
}
}
while(LL<RR)
{
if(s[LL]!=0)
{
long long tmp=0,tmpLL=s[LL],R;
if(s[LL]>0)
{
ans++;
}
s[LL]=0;
while(mp[-tmpLL].front()<=LL && s[mp[-tmpLL].front()]!=0)
{
mp[-tmpLL].pop_front();
}
s[mp[-tmpLL].front()]=0;
R=mp[-tmpLL].front();
mp[-tmpLL].pop_front();
for(int i=LL+1;i<mp[-tmpLL].front();i++)
{
if(s[i]==0)
{
tmp++;
}
}
ans=ans+R-LL-1-tmp;
}
if(s[RR]!=0)
{
long long tmp=0,tmpRR=s[RR],L;
if(s[RR]<0)
{
ans++;
}
s[RR]=0;
while(mp[-tmpRR].back()>=LL && s[mp[-tmpRR].back()]!=0)
{
mp[-tmpRR].pop_front();
}
s[mp[-tmpRR].back()]=0;
L=mp[-tmpRR].back();
mp[-tmpRR].pop_back();
for(int i=RR-1;i>=mp[-tmpRR].front();i--)
{
if(s[i]==0)
{
tmp++;
}
}
ans=ans+RR-L-1-tmp;
}
LL++;
RR--;
}
return ans;
}
int main(void)
{
cin>>n;
vector<int> s(n);
for(int i=0;i<n;i++)
{
cin>>s[i];
}
cout<<count_swaps(s);
return 0;
}
