Submission #1216911

#TimeUsernameProblemLanguageResultExecution timeMemory
1216911mariamp1Rice Hub (IOI11_ricehub)C++20
100 / 100
15 ms2120 KiB
#include "ricehub.h"
#include <vector>
#include <algorithm>
using namespace std;

int besthub(int R, int L, int X[], long long B) {
    vector<long long> a(R + 1), p(R + 1);
    for (int i = 1; i <= R; ++i) a[i] = X[i - 1];
    for (int i = 1; i <= R; ++i) p[i] = p[i - 1] + a[i];

    long long res = 0;
    for (int i = 1; i <= R; ++i) {
        int l = 0, r = R;
        while (l <= r) {
            int m = (l + r) / 2;
            int x = m / 2;
            int y = m - x;

            if (i > (R + 1) / 2) swap(x, y);
            if (i - x - 1 < 0 || i + y > R) {
                r = m - 1;
                continue;
            }

            long long cost = x * a[i] - (p[i - 1] - p[i - x - 1]) + (p[i + y] - p[i]) - y * a[i];
            if (cost <= B) {
                res = max(res, (long long)(x + y + 1));
                l = m + 1;
            } else {
                r = m - 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...