Submission #1101627

#TimeUsernameProblemLanguageResultExecution timeMemory
1101627stdfloatWatching (JOI13_watching)C++17
50 / 100
1064 ms19612 KiB
#include <bits/stdc++.h> using namespace std; using ll = long long; #define ff first #define ss second #define pii pair<int, int> #define sz(v) (int)(v).size() #define all(v) (v).begin(), (v).end() int main() { ios::sync_with_stdio(false); cin.tie(nullptr); int n, p, q; cin >> n >> p >> q; p = min(n, p); q = min(n, q); vector<int> a(n + 1, INT_MIN); for (int i = 1; i <= n; i++) cin >> a[i]; sort(1 + all(a)); int l = 0, r = (int)1e9; while (l <= r) { int md = (l + r) >> 1; int x = 0, y = 0; vector<vector<pii>> dp(n + 1); dp[0] = {{0, 0}}; for (int i = 1; i <= n; i++) { while (x < n && a[x + 1] <= a[i] - md) x++; while (y < n && a[y + 1] <= a[i] - (md << 1)) y++; vector<pii> v; for (auto j : dp[x]) if (j.ff < p) v.push_back({j.ff + 1, j.ss}); for (auto j : dp[y]) if (j.ss < q) v.push_back({j.ff, j.ss + 1}); sort(v.begin(), v.end()); for (int j = 0; j < sz(v); j++) if (!j || dp[i].back().ss > v[j].ss) dp[i].push_back(v[j]); assert(sz(dp[i]) <= (n << 1)); } if (dp[n].empty()) l = md + 1; else r = md - 1; } cout << l; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...