Submission #1131363

#TimeUsernameProblemLanguageResultExecution timeMemory
1131363vladiliusWatching (JOI13_watching)C++20
100 / 100
238 ms16192 KiB
#include <bits/stdc++.h> using namespace std; using ll = long long; using pii = pair<int, int>; #define pb push_back #define ff first #define ss second const int inf = 1e9; int main(){ ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0); int n, p, q; cin>>n>>p>>q; vector<int> a(n + 1); for (int i = 1; i <= n; i++){ cin>>a[i]; } sort(a.begin() + 1, a.end()); vector<int> :: iterator it; p = min(p, n); vector<vector<int>> dp(n + 1, vector<int>(p + 1)); for (int j = 0; j <= p; j++) dp[0][j] = 0; auto check = [&](int w){ for (int i = 1; i <= n; i++){ for (int j = 0; j <= p; j++){ dp[i][j] = inf; } } for (int i = 1; i <= n; i++){ it = lower_bound(a.begin() + 1, a.end(), a[i] - w + 1); int t1 = (int) (it - a.begin()) - 1; it = lower_bound(a.begin() + 1, a.end(), a[i] - 2 * w + 1); int t2 = (int) (it - a.begin()) - 1; for (int j = 0; j <= p; j++){ if (j < p) dp[i][j + 1] = min(dp[i][j + 1], dp[t1][j]); dp[i][j] = min(dp[i][j], dp[t2][j] + 1); } } return dp[n][p] <= q; }; int l = 1, r = inf; while (l + 1 < r){ int m = (l + r) / 2; if (check(m)){ r = m; } else { l = m + 1; } } if (check(l)) r = l; cout<<r<<"\n"; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...