Submission #1354869

#TimeUsernameProblemLanguageResultExecution timeMemory
1354869Charizard2021Rice Hub (IOI11_ricehub)C++20
17 / 100
0 ms344 KiB
#include "ricehub.h"
#include<bits/stdc++.h>
using namespace std;
int besthub(int R, int L, int X[], long long B){
    vector<long long> x(R);
    vector<long long> pref(R);
    for(long long i = 0; i < R; i++){
        x[i] = X[i];
        pref[i] = x[i];
        if(i != 0){
            pref[i] += pref[i - 1];
        }
    }
    int ans = 0;
    for(int i = 0; i < R; i++){
        long long low = 0;
        long long high = 1e9;
        long long res = 0;
        int res2 = 0;
        while(low <= high){
            long long mid = (low + high)/2;
            int L = lower_bound(x.begin(), x.end(), x[i] - mid) - x.begin();
            int R = upper_bound(x.begin(), x.end(), x[i] + mid) - x.begin();
            R--;
            long long val3 = (i == 0 ? 0 : pref[i - 1]) - (L == 0 ? 0 : pref[L - 1]);
            long long val1 = x[i] * (i - L) - val3;
            long long val4 = pref[R] - pref[i];
            long long val2 = val4 - (R - i) * x[i];
            if(val1 + val2 <= B){
                res = mid;
                res2 = R - L + 1;
                low = mid + 1;
            }
            else{
                high = mid - 1;
            }
        }
        ans = max(ans, res2);
    }
    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...