제출 #1139810

#제출 시각아이디문제언어결과실행 시간메모리
1139810tmmSwimming competition (LMIO18_plaukimo_varzybos)C++20
10 / 100
238 ms8180 KiB
#include <iostream>
#include <vector>
#include <algorithm>

using namespace std;

const int N_max = 1000005;
int n, A, B;
vector<int> v;
int dp[N_max];
void reading(){
    cin >> n >> A >> B;
    v.resize(n + 1);
    for(int i = 1; i <= n; i++)
        cin >> v[i];
    sort(v.begin() + 1, v.end());
}

int main() {
    reading();
    for(int i = 1; i < A; i++)
        dp[i] = -1;

    for(int i = A; i <= n; i++){
        if(i < min(2 * A, B)){
            dp[i] = v[i] - v[1];
            continue;
        }
        int L = max(A ,i - B), R = i - A, sol = L;
        while(L <= R){
            int M = (L + R) / 2;
            if(dp[M] - v[i] + v[M + 1] <= 0){
                sol = M;
                L = M + 1;
            }else{
                R = M - 1;
            }
        }
        dp[i] = v[n] - v[1];
        if(i <= B)dp[i] = v[i] - v[1];
        dp[i] = min(dp[i], max(dp[sol], v[i] - v[sol + 1]));
        if(sol != i - A)
            dp[i] = min(dp[i], max(dp[sol + 1],v[i] - v[sol + 2]));
    }
    cout << dp[n];

}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...