Submission #916177

#TimeUsernameProblemLanguageResultExecution timeMemory
916177JakobZorzDancing Elephants (IOI11_elephants)C++17
26 / 100
9019 ms12568 KiB
#include"elephants.h" #include<iostream> #include<vector> #include<algorithm> using namespace std; const int BUCKET_SIZE=256; int n,l; int pos[150000]; struct Bucket{ vector<int>arr; vector<int>num; vector<int>pos; void regen(){ num.resize(arr.size()); pos.resize(arr.size()); for(int i=0;i<(int)arr.size();i++){ num[i]=0; pos[i]=-1; for(int i=0;i<(int)arr.size();i++){ if(arr[i]>pos[i]){ num[i]++; pos[i]=arr[i]+l; } } } } void erase(int el){ auto it=lower_bound(arr.begin(),arr.end(),el); arr.erase(it); regen(); } void add(int el){ auto it=upper_bound(arr.begin(),arr.end(),el); arr.insert(it,el); regen(); } pair<int,int>get(int pos){ int res=0; for(int i=0;i<(int)arr.size();i++){ if(arr[i]>pos){ res++; pos=arr[i]+l; } } return{res,pos}; } }; vector<Bucket>buckets; void init(int N,int L,int X[]){ n=N; l=L; vector<int>vec; for(int i=0;i<n;i++){ pos[i]=X[i]; vec.push_back(X[i]); } sort(vec.begin(),vec.end()); buckets.emplace_back(); for(int i:vec){ buckets.back().arr.push_back(i); if((int)buckets.back().arr.size()==BUCKET_SIZE){ buckets.emplace_back(); } } for(auto&i:buckets) i.regen(); } int update(int i,int y){ for(auto&b:buckets){ if(b.arr[0]<=pos[i]&&pos[i]<=b.arr.back()){ b.erase(pos[i]); break; } } pos[i]=y; int cb=0; while(cb<(int)buckets.size()){ if(!buckets[cb].arr.empty()&&buckets[cb].arr[0]>=y) break; cb++; } if(cb) cb--; //cout<<"cb: "<<cb<<"\n"; buckets[cb].add(y); int pos=-1,res=0; for(auto&b:buckets){ auto r=b.get(pos); res+=r.first; pos=r.second; } /*cout<<"buckets:\n"; for(auto&b:buckets){ for(int i:b.arr) cout<<i<<" "; cout<<endl; }*/ return res; }
#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...