Submission #1273350

#TimeUsernameProblemLanguageResultExecution timeMemory
1273350lamlamlamRice Hub (IOI11_ricehub)C++20
68 / 100
9 ms1100 KiB
#include <bits/stdc++.h>
using namespace std;
#define MAX_R  1000000

#include "ricehub.h"
#define ll long long
struct Data {
    deque<int> dq;
    int sum = 0, lower_sum = 0;
    void push_back(int x){
        dq.push_back(x);
        int sz = dq.size(), mid = mid = (sz-1)/2;
        if(sz%2) lower_sum += dq[mid];
        sum += x;
    }
    void pop_front(){
        int sz = dq.size(), mid = (sz-1)/2;
        if(!sz) return;
        auto tmp = dq.front(); dq.pop_front(); sz--; mid = (sz-1)/2;
        sum -= tmp; lower_sum -= tmp;
        if(sz%2) lower_sum += dq[mid];
    }
    ll get_weight(){
        int sz = dq.size(), mid = (sz-1)/2;
        if(!sz) return 0;
        ll sus = dq[mid]*(mid+1) - lower_sum + (sum - lower_sum) - dq[mid]*(sz-mid-1);
        return sus;
    }
    int get_mid(){
        int sz = dq.size(), mid = (sz-1)/2;
        if(!sz) return 0;
        return dq[mid];
    }
};
int besthub(int R, int L, int X[], long long B)
{
    Data dq;
    int l = 0, r = 0, mid, sz, ans = 0, best_ans = 0;
    while(r<R){
        dq.push_back(X[r]);
        while(dq.get_weight()>B) dq.pop_front();
//        cerr << r << ' ' << r-dq.dq.size()+1 << ' ' << dq.get_weight() << ' ' << dq.get_mid() << ' ' << dq.dq.size() << endl;
        int sz = dq.dq.size();
        if(sz>best_ans){
            best_ans = sz;
            ans = dq.get_mid();
        }
        r++;
    }
    return best_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...