#include <bits/stdc++.h>
using namespace std;
int n, p, q;
int dp[2005][2005];
int dep[2005];
int longestjump[2005][2];
int main() {
cin.tie(0) -> sync_with_stdio(0);
cin >> n >> p >> q;
for(int i=1;i<=n;i++) {
cin >> dep[i];
}
int l = 1, r = 1000000003, mid;
p = min(p, 2001); q = min(q, 2001);
sort(dep+1, dep+n+1);
while(l <= r) {
mid = (l+r) >> 1;
memset(dp, 0, sizeof dp);
for(int i=1;i<=n;i++) {
longestjump[i][0] = (upper_bound(dep+1, dep+n+1, dep[i] + mid - 1) - dep) - 1;
longestjump[i][1] = (upper_bound(dep+1, dep+n+1, dep[i] + min(1010000000, 2*mid - 1)) - dep) - 1;
}
for(int i=0;i<=p;i++) {
for(int j=0;j<=q;j++) {
if(dp[i][j] == n) {
dp[i+1][j] = dp[i][j+1] = n;
continue;
}
dp[i+1][j] = max(dp[i+1][j], longestjump[dp[i][j]+1][0]);
dp[i][j+1] = max(dp[i][j+1], longestjump[dp[i][j]+1][1]);
}
}
if(dp[p][q] < n) l = mid + 1;
else r = mid - 1;
}
cout << l;
}
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |