#include <bits/stdc++.h>
#define int long long
using namespace std;
main() {
ios_base::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
int n, p, s;
cin >> n >> p >> s;
int a[n + 1];
for (int i = 1; i <= n; i++) {
cin >> a[i];
}
sort(a + 1, a + n + 1);
p = min(p, n);
s = min(s, n);
int l = 1, r = INT_MAX;
while (l < r) {
int mid = (l + r) >> 1;
int nxt[n + 2] = {};
int pp = 0;
for (int i = 1; i <= n; i++) {
pp = max(pp, i);
while (pp + 1 <= n && a[pp + 1] - a[i] + 1 <= mid) {
pp++;
}
nxt[i] = pp;
// cout << i << ' ' << p << endl;
}
nxt[n + 1] = n;
int nxt2[n + 2] = {};
pp = 0;
for (int i = 1; i <= n; i++) {
pp = max(pp, i);
while (pp + 1 <= n && a[pp + 1] - a[i] + 1 <= 2 * mid) {
pp++;
}
nxt2[i] = pp;
// cout << i << ' ' << p << endl;
}
nxt2[n + 1] = n;
int dp[p + 1][s + 1] = {};
// cout << mid << '\n';
for (int i = 0; i <= p; i++) {
for (int j = 0; j <= s; j++) {
if (i) {
dp[i][j] = max(dp[i][j], nxt[dp[i - 1][j] + 1]);
}
if (j) {
dp[i][j] = max(dp[i][j], nxt2[dp[i][j - 1] + 1]);
}
// cout << dp[i][j] << ' ';
}
// cout << endl;
}
if (dp[p][s] == n) {
r = mid;
} else {
l = mid + 1;
}
}
cout << l;
}
컴파일 시 표준 에러 (stderr) 메시지
watching.cpp:4:1: warning: ISO C++ forbids declaration of 'main' with no type [-Wreturn-type]
4 | main() {
| ^~~~| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |