Submission #1326386

#TimeUsernameProblemLanguageResultExecution timeMemory
1326386horiaboeriuRice Hub (IOI11_ricehub)C++20
100 / 100
8 ms1848 KiB
#include <bits/stdc++.h>
#include "ricehub.h"
using namespace std;
const int MAXN = 100000;
int v[MAXN + 1];
long long sp[MAXN + 1];
long long getSum(int st, int dr) {
    return sp[dr] - sp[st - 1];
}
long long calc(int st, int dr) {
    int mij;
    mij = (st + dr) / 2;//il pun in median, adica in v[mij]
    return (long long)v[mij] * (mij - st + 1) - getSum(st, mij) + getSum(mij + 1, dr) - (long long)v[mij] * (dr - mij);
}
int besthub(int n, int L, int X[], long long b) {
    //o sa aleg o subsecventa ca pozitiile sa fie cat mai apropiate
    //si o sa pun rice hubul in median ca sa aiba distanta minima pana la toate
    //si fac 2 pointers ca sa extind subsecventa
    //O(n)
    int i, j, rez;
    for (i = 1; i <= n; i++) {
        v[i] = X[i - 1];
        sp[i] = sp[i - 1] + v[i];
    }
    j = 1;
    rez = 0;
    for (i = 1; i <= n; i++) {
        while (j <= n && calc(i, j) <= b) {
            j++;
        }
        if (j - i > rez) {
            rez = j - i;
        }
    }
    return rez;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...