#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 = A; i <= B; i++)
dp[i] = v[i] - v[1];
for(int i = B + 1; i <= n; i++){
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] = 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 time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |