Submission #1350649

#TimeUsernameProblemLanguageResultExecution timeMemory
1350649ttparin_Arranging Shoes (IOI19_shoes)C++20
100 / 100
69 ms140568 KiB
#include "shoes.h"
#include<bits/stdc++.h>
using namespace std;
long long a[200010];
long long idx[200010];
queue<long long> q[200010];
long long n;
long long dp[200010];
long long read(long long idx){
long long sumi=0;
 while(idx>0){
    sumi+=dp[idx];
    idx-=idx&-idx;
 }
 return sumi;
}
void update(long long idx){
 while(idx<=n){
    dp[idx]++;
    idx+=idx&-idx;
 }
}
long long count_swaps(vector<int> s) {
    long long ans=0;
    for(auto g:s){
        n++;
        if(g<0){
            g=100000-g;
            if(q[g-100000].empty()==0){
                a[q[g-100000].front()]=n;
                a[n]=q[g-100000].front();
                q[g-100000].pop();
            }
            else{
                q[g].push(n);
            }
        }
        else{
            if(q[g+100000].empty()==0){
                a[q[g+100000].front()]=n;
                a[n]=q[g+100000].front();
                q[g+100000].pop();
            }
            else{
                q[g].push(n);
            }
        }
    }
    for(long long i=1;i<=n;i++){
      if(a[i]>i){
        long long x=read(a[i]-1)-read(i);
        ans+=a[i]-i-1-x;
        if(s[i-1]>0){ans++;}
        update(i);
        update(a[i]);
      }
    }
    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...