제출 #1333596

#제출 시각아이디문제언어결과실행 시간메모리
1333596qilby쌀 창고 (IOI11_ricehub)C++20
100 / 100
14 ms2372 KiB
#include <bits/stdc++.h>

using namespace std;
using ll = long long;

const int N = 100009;

ll n, m, b, a[N], p[N];

int besthub(int n_, int m_, int a_[], ll b_) {
    n = n_, m = m_, b = b_;
    for (int i = 1; i <= n; i++) a[i] = a_[i - 1];
    for (int i = 1; i <= n; i++) p[i] = p[i - 1] + a[i];

    int res = 1;

    for (ll i = 1; i <= n; i++) {
        int l = 0, r = min(i, n - i);

        while (l < r) {
            int mid = (l + r + 1) >> 1;
            int lg = min(i - mid + 1, i), rg = i + mid;
            ll c = p[rg] - p[i] - a[i] * (ll)mid;
            c += a[i] * max(0ll, (ll)mid - 1) - (p[i - 1] - p[lg - 1]);
            if (c <= b) l = mid; else r = mid - 1;
        }

        res = max(res, l + l);

        l = 0, r = min(i - 1, n - i);

        while (l < r) {
            int mid = (l + r + 1) >> 1;
            int lg = i - mid, rg = i + mid;
            ll c = p[rg] - p[i] - a[i] * (ll)mid;
            c += a[i] * (ll)mid - (p[i - 1] - p[lg - 1]);
            if (c <= b) l = mid; else r = mid - 1;
        }

        res = max(res, l + l + 1);
    }

    return res;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...