Submission #965684

#TimeUsernameProblemLanguageResultExecution timeMemory
965684AmrRobots (IOI13_robots)C++17
90 / 100
3023 ms30488 KiB
#include "robots.h" #include<bits/stdc++.h> using namespace std; typedef long long ll; #define F first #define S second #define sz size() #define all(x) (x).begin(),(x).end() const int N = 1e6+2; vector<pair<ll,ll> > v; ll n1, n2 , n; ll xx[N],yy[N]; bool cmp(pair<ll,ll> a, pair<ll,ll> b) { return a.S > b.S; } bool cmp2(pair<ll,ll> a, pair<ll,ll> b) { return a.S < b.S; } bool good(ll x) { if(n2>0)sort(all(v)); ll lst = 0; for(int i = 0; i < n1; i++) { pair<ll,ll> p = {xx[i],0}; ll pos = (lower_bound(v.begin(),v.end(),p)-v.begin()); pos--; if(pos<lst) continue; //reverse(v.begin()+lst,v.begin()+pos+1); if(n2>0) sort(v.begin()+lst,v.begin()+pos+1,cmp); lst = max(lst,min(pos+1,lst+x)); //if(lst!=pos+1) sort(v.begin()+lst,v.begin()+pos+1); // cout << pos << " "; } if(lst!=n&&n2>0) sort(v.begin()+lst,v.begin()+n,cmp2); for(int i = 0; i < n2; i++) { ll cnt = 0; while(cnt<x&&lst<n&&v[lst].S<yy[i]) cnt++,lst++; } return (lst==n); } int putaway(int A, int B, int T, int X[], int Y[], int W[], int S[]) { n = T , n1 = A , n2 = B; v.resize(n); for(int i = 0; i < A; i++) xx[i] = X[i]; for(int i = 0; i < B; i++) yy[i] = Y[i]; for(int i = 0; i < n; i++) v[i] = {W[i],S[i]}; sort(all(v)); sort(xx,xx+n1); sort(yy,yy+n2); if(good(n)==0) return -1; ll l = 0, r = n; //while(!good(r)) r*=2; while(l+1<r) { ll mid = (l+r)/2; if(good(mid)) r = mid; else l = mid; } 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...