Submission #289478

#TimeUsernameProblemLanguageResultExecution timeMemory
289478BeanZRice Hub (IOI11_ricehub)C++14
68 / 100
22 ms1280 KiB
#include <bits/stdc++.h> #include "ricehub.h" using namespace std; #define ll long long #define endl '\n' const int N = 1e5 + 5; int besthub(int r, int l, int x[], ll b){ int lf = 1, rt = 1; ll cur = 0; int ans = 0; while (rt < r && (cur + (x[rt] - x[0])) <= b){ cur = cur + (x[rt] - x[0]); rt++; } ans = max(ans, rt - lf + 1); for (int i = 2; i <= r; i++){ cur = cur - (rt - i + 1) * (x[i - 1] - x[i - 2]); cur = cur + (i - lf) * (x[i - 1] - x[i - 2]); while (cur > b){ cur = cur - (x[i - 1] - x[lf - 1]); lf++; } while (rt < r && (x[rt] - x[i - 1]) < (x[i - 1] - x[lf - 1])){ cur = cur + x[rt] - x[i - 1] - (x[i - 1] - x[lf - 1]); rt++; lf++; } while (lf > 1 && ((x[i - 1] - x[lf - 2]) < (x[rt - 1] - x[i - 1]))){ cur = cur + x[i - 1] - x[lf - 2] - (x[rt - 1] - x[i - 1]); rt--; lf--; } while (lf > 1 && rt < r){ ll costlf = x[i - 1] - x[lf - 2]; ll costrt = x[rt] - x[i - 1]; if ((min(costlf, costrt) + cur) > b) break; if (costlf > costrt){ cur = cur + costrt; rt++; } else { cur = cur + costlf; lf--; } } while (rt < r && (cur + x[rt] - x[i - 1]) <= b){ cur = cur + x[rt] - x[i - 1]; rt++; } while (lf > 1 && ((cur + x[i - 1] - x[lf - 2]) <= b)){ cur = cur + x[i - 1] - x[lf - 2]; lf--; } ans = max(ans, rt - lf + 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...