Submission #1216768

#TimeUsernameProblemLanguageResultExecution timeMemory
1216768takoshanavaRice Hub (IOI11_ricehub)C++20
100 / 100
12 ms1472 KiB
#include "ricehub.h" #include <bits/stdc++.h> //#define int long long #define pb push_back #define fs first #define sc second using namespace std; int besthub(int R, int L, int X[], long long B) { vector<long long> pref(R); pref[0] = X[0]; for (int i = 1; i < R; i++) pref[i] = pref[i - 1] + X[i]; int ans = 1; for (int i = 0; i < R; i++) { int ll = 0, rr = min(i, R - i - 1); while (ll < rr) { int mid = (ll + rr + 1) / 2; int l = i - mid; int r = i - 1; long long lsum = (l > 0 ? pref[r] - pref[l - 1] : (r >= 0 ? pref[r] : 0)); l = i + 1; r = i + mid; long long rsum = pref[r] - pref[l - 1]; long long cost = rsum - lsum; if (cost <= B) ll = mid; else rr = mid - 1; } int l = i - ll; int r = i - 1; long long lsum = (l > 0 ? pref[r] - pref[l - 1] : (r >= 0 ? pref[r] : 0)); l = i + 1; r = i + ll; long long rsum = pref[r] - pref[l - 1]; if (rsum - lsum <= B) { ans = max(ans, 2 * ll + 1); } } for (int i = 0; i + 1 < R; i++) { int ll = 0, rr = min(i + 1, R - i - 1); while (ll < rr) { int mid = (ll + rr + 1) / 2; int l = i - mid + 1; int r = i; long long lsum = pref[r] - pref[l - 1]; l = i + 1; r = i + mid; long long rsum = pref[r] - pref[l - 1]; long long cost = rsum - lsum; if (cost <= B) ll = mid; else rr = mid - 1; } int l = i - ll + 1; int r = i; long long lsum = pref[r] - pref[l - 1]; l = i + 1; r = i + ll; long long rsum = pref[r] - pref[l - 1]; if (rsum - lsum <= B) { ans = max(ans, 2 * ll); } } 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...