Submission #7022

#TimeUsernameProblemLanguageResultExecution timeMemory
7022gs13068Robots (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--) { it=E.lower_bound(std::make_pair(D[i].second,-1)); if(it!=E.end()) { V[i]=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;i++)if(!V[i]) { while(j<A&&(X[j]<D[i].first||R[j]==mid))j++; if(j<A) { V[i]=1; R[j]++; } else 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...