Submission #1140254

#TimeUsernameProblemLanguageResultExecution timeMemory
1140254tmmSwimming competition (LMIO18_plaukimo_varzybos)C++20
100 / 100
426 ms4648 KiB
#include <iostream>
#include <algorithm>
#include <bitset>

using namespace std;
const int N_max = 1e6 + 5;

int n, A, B;
int v[N_max];

void reading(){
    cin >> n >> A >> B;
    for(int i = 1; i <= n; i++)
        cin >> v[i];
    sort(v + 1, v + n + 1);
}
bitset<N_max> propusi;
void reset(){
    for(int i = 0; i < N_max; i++)
        propusi[i] = 0;
}

int findNext(int poz){
    while(propusi[poz] == 0 && poz <= n)poz++;
    return poz;
}
bool verif(int i, int st, int md){
    if(st <= n && !(v[i] - v[st] <= md && i - st + 1 <= B))
        return 1;
    return 0;
}
bool isPossible(int maxDifference){
    reset();
    propusi[1] = 1;
    int st = 1; // startar
    for(int i = 1; i <= n && st <= n; i++){
        while(verif(i, st, maxDifference))
            st = findNext(st + 1);
        if(i - st + 1 < A) continue;
        propusi[i + 1] = 1;
    }
    if(propusi[n + 1] == 1)
        return 1;
    return 0;
}

int main(){
    reading();
    int L = 0, R = N_max, sol = R;
    while(L <= R){
        int M = (L + R) / 2;
        if(isPossible(M)){
            sol = M;
            R = M - 1;
        }else
            L = M + 1;
    }
    cout << sol;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...