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...