Submission #1307770

#TimeUsernameProblemLanguageResultExecution timeMemory
1307770lufychopArranging Shoes (IOI19_shoes)C++20
50 / 100
1101 ms145864 KiB
#include "shoes.h"
#include <bits/stdc++.h>

using namespace std;

long long n;
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-1;
    for(int i=0;i<n;i++)
    {
        mp[s[i]].push_back(i);
    }
    while(LL<RR)
    {
        if(s[LL]!=0)
        {
            long long tmp=0;
            long long L=LL+1;
            long long R=mp[-s[LL]].front();
            mp[s[LL]].pop_front();
            mp[-s[LL]].pop_front();
            for(int i=L;i<=R;i++)
            {
                if(s[i]==0)
                {
                    tmp++;
                }
            }
            ans=ans+R-LL-1-tmp;
            // cout<<LL<<R<<"\n";
            if(s[R]<0)
            {
                ans++;
            }
            s[R]=0;
            s[LL]=0;
        }
        if(s[RR]!=0)
        {
            long long tmp=0;
            long long L=mp[-s[RR]].back();
            long long R=RR-1;
            mp[-s[RR]].pop_back();
            mp[s[RR]].pop_back();
            for(int i=L;i<=R;i++)
            {
                if(s[i]==0)
                {
                    tmp++;
                }
            }
            ans=ans+RR-L-1-tmp;
            // cout<<L<<RR<<"\n";
            if(s[L]>0)
            {
                ans++;
            }
            s[L]=0;
            s[RR]=0;
        }
        // cout<<LL<<RR;
        LL++;
        RR--;
    }
	return ans;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...