Submission #1248047

#TimeUsernameProblemLanguageResultExecution timeMemory
1248047nikdRice Hub (IOI11_ricehub)C++20
17 / 100
0 ms328 KiB
#include <bits/stdc++.h>
#include <istream>
using namespace std;
using ll = long long;

ll besthub(int n, int l, int* x, ll b){
    int sol = 0;
    int idxl = 0;
    int idxr = 0;
    ll curr_cost = 0;
    while(idxr+1 < n && curr_cost+x[idxr+1]-x[0] <= b){
        curr_cost += x[idxr+1] - x[0];
        idxr++;
    }
    sol = idxr-idxl+1;
    for(int i = 1; i<n; i++){
        ll delta = x[i]-x[i-1];
        curr_cost += (i-idxl)*delta;
        curr_cost -= (idxr-i+1)*delta;
        if(idxr < i){
            assert(idxr+1 == i);
            //idxr++;
        }
        while(curr_cost > b){
            curr_cost -= x[i]-x[idxl];
            idxl++;
            assert(idxl <= i);
        }
        while(idxr+1 < n && curr_cost+x[idxr+1]-x[i] <= b){
            curr_cost += x[idxr+1] - x[i];
            idxr++;
        }
        while(idxr+1 < n && x[idxr+1]-x[i] < x[i]-x[idxl]){
            curr_cost -= x[i]-x[idxl];
            curr_cost += x[idxr+1]-x[i];
            idxl++; idxr++;
        }
        while(idxr+1 < n && curr_cost+x[idxr+1]-x[i] <= b){
            curr_cost += x[idxr+1] - x[i];
            idxr++;
        }
        sol = max(sol, idxr-idxl+1);
    }
    return sol;
}

// int main(){
//     freopen("input.txt", "r", stdin);
//     freopen("output.txt", "w", stdout);
//     int n; cin >> n;
//     ll b; cin >> b;
//     vector<ll> x(n);
//     for(ll &i: x) cin >> i;
//     cout << besthub(n, 0, x,b) << '\n';
// }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...