Submission #343324

#TimeUsernameProblemLanguageResultExecution timeMemory
343324Aldas25Rice Hub (IOI11_ricehub)C++14
100 / 100
21 ms2156 KiB
#include "ricehub.h"
#include <bits/stdc++.h>

using namespace std;

#define FOR(i, a, b) for (int i = (a); i <= (b); i++)
#define REP(n) FOR(O, 1, (n))
#define f first
#define s second
#define pb push_back
typedef long long ll;

const int MAXN = 100100;

int r, l;
int x[MAXN];
ll b;

int besthub(int R, int L, int X[], long long B)
{
    r = R;
    l = L;
    x[0]  =X[0];
    FOR(i, 1, r) x[i] = X[i-1];
    b = B;

    int ans = 1;
    int le = 1, ri = 1;
    ll sum = 0ll;
    while (le <= r) {
        if (sum <= b) ans = max(ans, ri - le);

        int mid = (le+ri-1)/2;
        if (ri <= r && sum <= b) {
            sum += abs(x[ri] - x[mid]);
            int newMid = (le+ri)/2;
            ll dx = x[newMid] - x[mid];
            ll cnt = ri-le+1;
            sum += (cnt/2) * dx;
            sum -= ((cnt+1)/2) * dx;
            ri++;
        } else {
            sum -= abs(x[le] - x[mid]);
            int newMid = (le+ri)/2;
            ll dx = x[newMid] - x[mid];
            ll cnt = ri-le-1;
            sum += (cnt/2) * dx;
            sum -= ((cnt+1)/2) * dx;
            le++;
        }

        //cout << " le = " << le << " ri = " << ri << " sum = " << sum << endl;
    }
    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...