Submission #392642

#TimeUsernameProblemLanguageResultExecution timeMemory
392642AntekbRobots (IOI13_robots)C++14
90 / 100
3075 ms9428 KiB
#include "robots.h" #include<bits/stdc++.h> #define st first #define nd second using namespace std; const int N=(1<<16); long long M[2*N], lazy[2*N]; void init(){ for(int i=0; i<2*N; i++){ M[i]=0; lazy[i]=0; } } void prop(int v){ if(v>=N || !lazy[v])return; int l=2*v, r=2*v+1; lazy[l]+=lazy[v]; lazy[r]+=lazy[v]; M[l]+=lazy[v]; M[r]+=lazy[v]; lazy[v]=0; } void add(int v, int L, int R, int l, int r, int c){ if(l==L && r==R){ lazy[v]+=c; M[v]+=c; return; } int m=(L+R)>>1; prop(v); if(l<=m)add(2*v, L, m, l, min(r, m), c); if(r>m)add(2*v+1, m+1, R, max(m+1, l), r, c); M[v]=min(M[2*v], M[2*v+1]); return; } int putaway(int A, int B, int T, int X[], int Y[], int W[], int S[]) { sort(X, X+A); sort(Y, Y+B); pair<int, int> tab[T]; for(int i=0; i<T; i++){ tab[i]={upper_bound(X, X+A, W[i])-X, upper_bound(Y, Y+B, S[i])-Y}; if(tab[i].st==A && tab[i].nd==B)return -1; //cout<<tab[i].st<<" "<<tab[i].nd<<"\n"; } sort(tab, tab+T); reverse(tab, tab+T); long long ans=0; int pref[2][B+1]; for(int i=0; i<=B; i++)pref[0][i]=pref[1][i]=0; int wsk=0; for(int i=A; i>=0; i--){ int sum=0; for(int j=B; j>=0; j--){ while(wsk<T && tab[wsk].st==i && tab[wsk].nd==j)sum++, wsk++; pref[i&1][j]=pref[!(i&1)][j]+sum; while(ans*(A+B-i-j)<pref[i&1][j])ans++; } } return ans; }
#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...