Submission #856164

#TimeUsernameProblemLanguageResultExecution timeMemory
856164aykhnRice Hub (IOI11_ricehub)C++14
100 / 100
12 ms4208 KiB
#include "ricehub.h" #include <bits/stdc++.h> // author : aykhn using namespace std; typedef long long ll; #define pb push_back #define ins insert #define mpr make_pair #define all(v) v.begin(), v.end() #define bpc __builtin_popcount #define pii pair<int, int> #define pll pair<ll, ll> #define fi first #define se second #define infll 0x3F3F3F3F3F3F3F3F #define inf 0x3F3F3F3F vector<ll> pref; ll getsum(int l, int r) { return pref[r] - pref[l - 1]; } int besthub(int n, int L, int X[], ll b) { ll x[n + 1]; pref.assign(n + 1, 0); for (int i = 1; i <= n; i++) x[i] = X[i - 1]; for (int i = 1; i <= n; i++) pref[i] = pref[i - 1] + x[i]; int ans = 1; for (int i = 1; i <= n; i++) { int l = 1; int r = min(i - 1, n - i); int best = 0; while (l <= r) { int mid = (l + r) >> 1; if (getsum(i + 1, i + mid) - getsum(i - mid, i - 1) <= b) { best = mid; l = mid + 1; } else r = mid - 1; } ll sum = getsum(i + 1, i + best) - getsum(i - best, i - 1); if (i - best - 1 >= 1 && sum + x[i] - x[i - best - 1] <= b) ans = max(ans, best * 2 + 2); else if (i + best + 1 <= n && sum + x[i + best + 1] - x[i] <= b) ans = max(ans, best * 2 + 2); else ans = max(ans, best * 2 + 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...