#include <bits/stdc++.h>
#define ll long long
#define ld long double
#define all(v) begin(v), end(v)
#define pi pair<int, int>
#define vi vector<int>
using namespace std;
const int N = 2e3+3;
int n, p, q, a[N];
int dp[N][N], jp[N][2];
bool ck(int x){
memset(dp, 0, sizeof(dp));
a[n+1] = 1e9;
// cout << x << "\n";
for(int i = 1; i <= n; i++){
jp[i][0] = lower_bound(a+1,a+n+1,a[i]+x)-a-1;
jp[i][1] = lower_bound(a+1,a+n+1,a[i]+x*2)-a-1;
}
int mx = 0;
for(int i = 0; i <= min(p, n); i++){
for(int j = 0; j <= min(q, n); j++){
if(i > 0){
int prv = dp[i-1][j]+1;
dp[i][j] = max(dp[i][j], jp[prv][0]);
}
if(j > 0){
int prv = dp[i][j-1]+1;
dp[i][j] = max(dp[i][j], jp[prv][1]);
}
mx = max(mx, dp[i][j]);
// cout << dp[i][j] << " ";
}
// cout << "\n";
}
if(mx >= n) return true;
return false;
}
int main(){
ios_base::sync_with_stdio(0); cin.tie(0);
cin >> n >> p >> q;
for(int i = 1; i <= n; i++) cin >> a[i];
sort(a+1,a+n+1);
int l = 1, r = 5e8;
while(l <= r){
int mid = (l+r)/2;
if(ck(mid)) r = mid-1;
else l = mid+1;
}
cout << l;
return 0;
}
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |