Submission #563337

#TimeUsernameProblemLanguageResultExecution timeMemory
5633371neRice Hub (IOI11_ricehub)C++14
100 / 100
15 ms4908 KiB
#include "ricehub.h" #include<bits/stdc++.h> using namespace std; int besthub(int R, int L, int X[], long long B) { int ans = 0; vector<int64_t>pref(R + 1,0),dpref(R + 1,0); vector<int64_t>suff(R + 1,0),dsuff(R + 1,0); for (int i = 0 ;i<R - 1;++i){ pref[i + 1] = pref[i] + (X[i + 1] - X[i]); dpref[i + 2] = pref[i + 1] + dpref[i + 1]; } for (int i = R - 2 ;i>=0;--i){ suff[i] = suff[i + 1] + (X[i + 1] - X[i]); dsuff[i] = suff[i] + dsuff[i + 1]; } auto dist = [&](int l,int r){ return pref[r] * (r - l) - dpref[r] + dpref[l]; }; auto dist2 = [&](int l,int r){ return suff[l] * (r - l) + dsuff[r + 1] - dsuff[l + 1]; }; auto distt = [&](int l,int r){ int mid = (l + r)>>1; return dist(l,mid) + dist2(mid,r); }; int l = 0,r = 0; while(l<=r && r < R){ if (r + 1 < R && distt(l,r + 1)<=B){ ++r; } else if (l + 1<=r) { ++l; } else { l++; r = l; } //cout<<r<<" "<<l<<" "<<distt(l,r)<<'\n'; ans = max(ans,r - l + 1); } 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...