Submission #115284

#TimeUsernameProblemLanguageResultExecution timeMemory
115284oolimryRice Hub (IOI11_ricehub)C++14
100 / 100
24 ms2432 KiB
#include "ricehub.h" #include <bits/stdc++.h> using namespace std; int besthub(int R, int L, int X[], long long B) { long long pre[R]; pre[0] = X[0]; for(long long i = 1;i < R;i++){ pre[i] = pre[i-1] + X[i]; } long long ans = 0; for(long long i = 0;i < R;i++){ long long pos = X[i]; long long low = 0; long long high = R; while(true){ if(low == high - 1) break; long long s = (low + high) / 2; long long l = i - s; long long u = i + s; if(l < 0 || u >= R){ high = s; continue; } long long sum = 0ll; sum += pre[i]; if(l > 0) sum -= pre[l-1]; sum = (s + 1) * pos - sum; sum += pre[u]; sum -= pre[i]; sum -= pos * s; if(sum > B){ high = s; } else{ low = s; } } ans = max(ans, 2 * low + 1); long long l = i - low; long long u = i + low; long long sum = 0ll; sum += pre[i]; if(l > 0) sum -= pre[l-1]; sum = (low + 1) * pos - sum; sum += pre[u]; sum -= pre[i]; sum -= pos * low; if(l > 0 && sum + abs(pos - X[l-1]) <= B){ ans = max(ans, 2 * low + 2); } if(u + 1 < R && sum + abs(pos - X[u+1]) <= B){ ans = max(ans, 2 * low + 2); } } 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...