Submission #1191759

#TimeUsernameProblemLanguageResultExecution timeMemory
1191759nagorn_phWatching (JOI13_watching)C++20
0 / 100
192 ms1312 KiB
#include <bits/stdc++.h> #define int long long #define all(a) a.begin(), a.end() #define emb emplace_back using namespace std; const int inf = 1e18; int n, p, q; set <int> aa; vector <int> a; bool can(int mid){ // cout << mid << ": \n"; vector <vector <int>> dp(p + 1, vector <int> (q + 1)); int mx = 0; for (int i = 0; i <= p; i++) { for (int j = 0; j <= q; j++) { if (i == 0 && j == 0) continue; int pp = 0, qq = 0; if (i > 0) pp = upper_bound(all(a), a[dp[i - 1][j]] + mid - 1) - a.begin(); if (j > 0) qq = upper_bound(all(a), a[dp[i][j - 1]] + mid + mid - 1) - a.begin(); pp = min(pp, (int)a.size() - 1); qq = min(qq, (int)a.size() - 1); dp[i][j] = max(pp, qq); // mx = max(mx, dp[i][j]); // cout << i << ", " << j << ": " << dp[i][j] << "\n"; } } // cout << "--------------\n"; return dp[p][q] >= (a.size() - 1); } int32_t main(){ cin.tie(NULL)->sync_with_stdio(false); cin >> n >> p >> q; if (p + 2 * q >= n) { cout << 1; return 0; } for (int i = 0; i < n; i++) { int x; cin >> x; aa.insert(x); } a = vector <int> (all(aa)); a.emb(1e9); int l = 1, r = inf, ans = inf; while (l <= r) { int mid = (l + r) / 2; if (can(mid)) { r = mid - 1; ans = mid; } else l = mid + 1; } cout << ans; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...