Submission #290419

#TimeUsernameProblemLanguageResultExecution timeMemory
290419eohomegrownappsRobots (IOI13_robots)C++14
100 / 100
2959 ms17700 KiB
#include "robots.h" #include <bits/stdc++.h> using namespace std; typedef long long ll; ll w,h; vector<pair<int,int>> coords; struct Node{ int s,e; ll sum = 0; ll suffmin = 0; Node *l, *r; Node(int _s, int _e){ s=_s; e=_e; if (s==e){ return; } l = new Node(s,(s+e)/2); r = new Node((s+e)/2+1,e); } void clear(ll mid){ if (s==e){ if (e!=h-1){ sum = mid; } else { sum = 0; } suffmin = min(0LL, mid); return; } l->clear(mid); r->clear(mid); sum = l->sum + r->sum; suffmin = min(l->suffmin+r->sum,r->suffmin); } void decrement(int ind){ int m = (s+e)/2; if (s==e){ sum--; suffmin = min(suffmin,sum); return; } if (ind<=m){ l->decrement(ind); } else { r->decrement(ind); } sum = l->sum + r->sum; suffmin = min(l->suffmin+r->sum,r->suffmin); } }; Node *root; bool success(ll mid){ root->clear(mid); for (auto c : coords){ ll x = c.first; ll y = c.second; root->decrement(y); ll numobjs = root->suffmin; ll val = mid*(w-1-x); if (val+numobjs<0){return false;} } return true; } int putaway(int lx, int ly, int n, int xpos[], int ypos[], int xtoys[], int ytoys[]) { sort(xpos,xpos+lx); sort(ypos,ypos+ly); for (ll i = 0; i<n; i++){ xtoys[i]=upper_bound(xpos,xpos+lx,xtoys[i])-xpos; ytoys[i]=upper_bound(ypos,ypos+ly,ytoys[i])-ypos; } w=lx+1; h=ly+1; for (ll i = 0; i<n; i++){ coords.push_back({xtoys[i],ytoys[i]}); if (xtoys[i]==w-1&&ytoys[i]==h-1){ return -1; } } sort(coords.rbegin(), coords.rend()); ll l = 0, r = n; root = new Node(0,h-1); while (l<=r){ ll mid = (l+r)/2;; if (success(mid)){ r=mid-1; } else { l=mid+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...