Submission #7020

#TimeUsernameProblemLanguageResultExecution timeMemory
7020gs13068Robots (IOI13_robots)C++98
90 / 100
3000 ms19668 KiB
#include "robots.h" #include<algorithm> #include<set> int V[1000000]; std::pair<int,int> D[1000000]; int R[50000]; std::set<std::pair<int,int> > E; std::set<std::pair<int,int> >::iterator it; int putaway(int A, int B, int T, int X[], int Y[], int W[], int S[]) { int i,j,l,r,mid; for(i=0;i<T;i++) { D[i].first=W[i]+1; D[i].second=S[i]+1; } std::sort(X,X+A); std::sort(Y,Y+B); std::sort(D,D+T); for(i=0;i<T;i++)if((!A||D[i].first>X[A-1])&&(!B||D[i].second>Y[B-1]))return -1; l=1;r=T; while(l<r) { mid=(l+r)/2; E.clear(); for(i=0;i<T;i++)V[i]=0; for(i=0;i<B;i++) { R[i]=0; E.insert(std::make_pair(Y[i],i)); } for(i=T-1;i>=0;i--)if(!E.empty()&&E.rbegin()->first>=D[i].second) { V[i]=1; it=E.lower_bound(std::make_pair(D[i].second,-1)); R[it->second]++; if(R[it->second]==mid)E.erase(it); } for(i=0;i<A;i++)R[i]=0; j=0; for(i=0;i<T&&j<A;i++)if(!V[i]) { while(j<A&&(X[j]<D[i].first||R[j]==mid))j++; if(j<A) { V[i]=1; R[j]++; } } for(i=0;i<T;i++)if(!V[i])break; if(i==T)r=mid; else l=mid+1; } return r; }
#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...