Submission #985927

#TimeUsernameProblemLanguageResultExecution timeMemory
985927user736482Arranging Shoes (IOI19_shoes)C++17
100 / 100
240 ms88604 KiB
#include<bits/stdc++.h> #include "shoes.h" using namespace std; //#pragma GCC optimize ("O3") int licz[200007]; vector<int>zacz[200007]; vector<pair<int,int>>przez[200007]; vector<int>plus_[200007],minus_[200007]; void init(){ for(int i=0;i<200007;i++){ int ak=1; while(ak+i<200007 && i%ak==0){ zacz[i].push_back(0); for(int j=0;j<ak;j++){ przez[i+j].push_back({i,(int)zacz[i].size()-1}); } ak*=2; } //cout<<zacz[i].size()<<" "; } } void change(int pos,int val){ for(int i=0;i<(int)przez[pos].size();i++){ zacz[przez[pos][i].first][przez[pos][i].second]+=val-licz[pos]; //cout<<37<<" "; } licz[pos]=val; } int get(int x, int y){ int ak=1,logarithm=0; int odp=0; y++; while(x!=y){ //cout<<3; while(x+ak*2<=y && (int)zacz[x].size()>logarithm+1){ ak*=2; logarithm++; } odp+=zacz[x][logarithm]; x+=ak; while(x+ak>y){ ak/=2; logarithm--; } } return odp; } long long count_swaps(vector<int>v){ long long odp=0; for(int i=(int)v.size()-1;i>=0;i--){ if(v[i]>0){ plus_[v[i]].push_back(i); } else{ // cout<<-v[i]<<"\n"; minus_[-v[i]].push_back(i); } } init(); for(int i=0;i<(int)v.size();i++){ if(licz[i]==1) continue; if(v[i]>0){ odp++; odp+=minus_[v[i]][(int)minus_[v[i]].size()-1]-i-1; // cout<<minus_[v[i]].size();return -1; odp-=get(i+1,minus_[v[i]][(int)minus_[v[i]].size()-1]-1); change(i,1); change(minus_[v[i]][(int)minus_[v[i]].size()-1],1); plus_[v[i]].pop_back(); minus_[v[i]].pop_back(); } else{ //return -1; odp+=plus_[-v[i]][(int)plus_[-v[i]].size()-1]-i-1; odp-=get(i+1,plus_[-v[i]][(int)plus_[-v[i]].size()-1]-1); change(i,1); change(plus_[-v[i]][(int)plus_[-v[i]].size()-1],1); plus_[-v[i]].pop_back(); minus_[-v[i]].pop_back(); } } return odp; } /*int main(){ vector<int>v={1,1,-1,1,-1,-1}; cout<<count_swaps(v); //init(); //change(5,1); //cout<<get(0,200000); return 0; }*/
#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...