제출 #146935

#제출 시각아이디문제언어결과실행 시간메모리
146935karmaRice Hub (IOI11_ricehub)C++11
100 / 100
39 ms3320 KiB
#include <bits/stdc++.h>
#include "ricehub.h"
#define ll        long long

using namespace std;

const int N = int(1e5) + 7;

ll sum[N], pos[N];

ll Cost(int l, int r)
{
    int mid = (l + r) >> 1;
    ll res = (ll)1e18, cost;
    for(int i = max(mid - 1, l); i <= min(mid + 1, r); ++i) {
        cost = 1ll * (i - l + 1) * pos[i] - (sum[i] - sum[l - 1]);
        cost += sum[r] - sum[i] - 1ll * (r - i) * pos[i];
        res = min(res, cost);
    }
    return res;
}

int besthub(int n, int l, int x[], ll b)
{
    int res = 0, lef, rig, mid;
    for(int i = 1; i <= n; ++i) sum[i] = sum[i - 1] + (pos[i] = x[i - 1]);
    for(int i = 1; i <= n; ++i) {
        lef = 1, rig = i;
        while(lef <= rig) {
            mid = (lef + rig) >> 1;
            if(Cost(mid, i) > b) lef = mid + 1;
            else rig = mid - 1;
        }
        res = max(res, i - lef + 1);
    }
    return res;
}

/*int _n, _l, _x[N], _b;

int main()
{
    ios_base::sync_with_stdio(0);
    cin.tie(0), cout.tie(0);
    if(fopen("test.inp", "r")) {
      freopen("test.inp", "r", stdin);
      freopen("test.out", "w", stdout);
    }

    cin >> _n >> _l;
    for(int i = 0; i < _n; ++i) cin >> _x[i];
    cin >> _b;
    cout << besthub(_n, _l, _x, _b);

    return 0;
}*/
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...