제출 #995531

#제출 시각아이디문제언어결과실행 시간메모리
995531CSQ31로봇 (IOI13_robots)C++17
100 / 100
1102 ms21072 KiB
#pragma GCC optimize("Ofast") #include "robots.h" #include<bits/stdc++.h> using namespace std; #define fi first #define se second typedef pair<int,int> pii; struct fenwick{ int n; vector<int>bit; void upd(int pos,int val){ for(int i=pos;i<=n;i+=i&(-i))bit[i]+=val; } int query(int r){ int res = 0; for(int i=r;i>0;i-=i&(-i))res+=bit[i]; return res; } int search(int val){ int sum = 0,pos = 0; for(int i=19;i>=0;i--){ if(pos+(1<<i) < n && sum+bit[pos+(1<<i)]<val){ pos+=(1<<i); sum+=bit[pos]; } } return pos+1; } fenwick(int _n){ n = _n; bit.assign(n+1,0); } }; int putaway(int A, int B, int T, int X[], int Y[], int W[], int S[]) { vector<int>x,y; for(int i=0;i<A;i++)x.push_back(X[i]); for(int i=0;i<B;i++)y.push_back(Y[i]); sort(x.begin(),x.end()); sort(y.begin(),y.end()); vector<pii>pt(T); for(int i=0;i<T;i++){ W[i] = lower_bound(x.begin(),x.end(),W[i]+1) - x.begin(); S[i] = lower_bound(y.begin(),y.end(),S[i]+1) - y.begin(); pt[i] = {W[i],S[i]}; } // for(pii x:pt)cout<<x.fi<<" "<<x.se<<'\n'; sort(pt.begin(),pt.end()); int l = 1,r = T; while(r>=l){ int mid = (l+r)/2; fenwick f(B+1); int p = 0,tot = 0; for(int i=0;i<A;i++){ while(p<T && pt[p].fi <= i){ f.upd(pt[p].se+1,1); tot++; p++; } for(int j=0;j<mid;j++){ if(!tot)break; int k = f.search(tot); f.upd(k,-1); tot--; } } while(p!=T){ f.upd(pt[p].se+1,1); tot++; p++; } //cout<<mid<<'\n'; // for(int i=1;i<=B+1;i++)cout<<f.query(i)<<" "; // cout<<'\n'; bool ok = 1; if(tot - f.query(B))ok = 0; for(int i=0;i<B;i++){ int sum = tot - f.query(i); if(sum > mid * 1LL* (B-i))ok = 0; } if(ok)r = mid-1; else l = mid+1; } if(l == T+1)return -1; return l; }
#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...