Submission #1135904

#TimeUsernameProblemLanguageResultExecution timeMemory
1135904nikolashamiArranging Shoes (IOI19_shoes)C++20
10 / 100
5 ms9800 KiB
#include<bits/stdc++.h>
using namespace std;
using ll=long long;

const int N=1e5+2;
set<int>ps[N],ng[N];
int b[N<<1];

void reset(int32_t n){
    for(int i=0;i<=n;++i){
        if(i<N)ps[i].clear();
        if(i<N)ng[i].clear();
        b[i]=0;
    }
}

ll count_swaps(vector<int>a){
    int n=a.size();
    reset(n);

    for(int i=0;i<n;++i){
        if(a[i]>0)ps[a[i]].insert(i);
        else ng[-a[i]].insert(i);
    }

    ll ans=0;
    for(int i=0,j;i<n;++i){
        if(b[i])continue;
        if(a[i]>0){
            j=*ng[a[i]].begin();
            ng[a[i]].erase(ng[a[i]].begin());
            ps[a[i]].erase(ps[a[i]].find(i));
            ans+=j-i;
        }
        if(a[i]<0){
            j=*ps[-a[i]].begin();
            ps[-a[i]].erase(ps[-a[i]].begin());
            ng[-a[i]].erase(ng[-a[i]].find(i));
            ans+=j-i-1;
        }
        b[i]=b[j]=1;
    }

    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...