Submission #1135911

#TimeUsernameProblemLanguageResultExecution timeMemory
1135911nikolashamiArranging Shoes (IOI19_shoes)C++20
100 / 100
62 ms22120 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],bit[N<<1],n; int get(int k){ int s=0;++k; while(k>0){ s+=bit[k]; k-=k&-k; } return s; } void add(int k,int x){ ++k; while(k<=n){ bit[k]+=x; k+=k&-k; } } void reset(){ for(int i=0;i<=n;++i){ if(i<N)ps[i].clear(); if(i<N)ng[i].clear(); bit[i]=0; b[i]=0; } } ll count_swaps(vector<int>a){ n=a.size(); 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)); } 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; } ans+=j-i-(get(j)-get(i-1)); b[i]=b[j]=1; add(i,1); add(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...