// #pragma GCC optimize("O3")
// #pragma GCC optimization("Ofast,unroll-loops")
// #pragma GCC target("avx2,bmi,bmi2,lzd,popd")
#include <bits/stdc++.h>
using namespace std;
// #define int long long
#define ll long long
#define FOR(i, l, r) for (int i = (l); i <= (r); i++)
#define FOD(i, r, l) for (int i = (r); i >= (l); i--)
#define fi first
#define se second
#define pii pair<int, int>
const ll mod = 1e6+3;
const int MAXN = 2e3 + 5;
const ll oo = 1e9 + 7;
const ll base = 350;
int n, a[MAXN], p, q;
int nxt1[MAXN], nxt2[MAXN];
int f[MAXN][MAXN];
int dp(int i, int t, int k){
if(i>n){
return 0;
}
if(f[i][t]!=-1){
return f[i][t];
}
int id=nxt1[i];
int ans=oo;
if(t+1<=p && id+1!=i){
ans=dp(id+1, t+1, k);
}
id=nxt2[i];
if(id+1==i){
return f[i][t]=oo;
}
ans=min(ans, dp(id+1, t, k)+1);
return f[i][t]=ans;
}
int check(int k){
FOR(i, 1, n){
nxt1[i]=upper_bound(a+1, a+1+n+1, a[i]+k-1)-a-1;
nxt2[i]=upper_bound(a+1, a+1+n+1, a[i]+2*k-1)-a-1;
}
memset(f, -1, sizeof f);
if(dp(1, 0, k)<=q){
return 1;
}
return 0;
}
signed main(){
ios::sync_with_stdio(false);
cin.tie(nullptr);
// freopen("test.txt", "r", stdin);
// freopen("o2.out", "w", stdout);
cin >> n >> p >> q;
FOR(i, 1, n){
cin >> a[i];
}
sort(a+1, a+1+n);
a[n+1]=oo;
int l=0, r=1e9, ans;
while(l<=r){
int mid=(l+r)/2;
if(check(mid)){
ans=mid;
r=mid-1;
}
else{
l=mid+1;
}
}
cout << ans;
return 0;
}
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |