제출 #1001643

#제출 시각아이디문제언어결과실행 시간메모리
1001643coolboy19521Watching (JOI13_watching)C++17
0 / 100
20 ms5508 KiB
#pragma GCC optimize("Ofast") #include"bits/stdc++.h" #define int long long using namespace std; const int sz = 2e5 + 10; const int inf = 1e18; int a[sz]; int n, p, q; bool f; void dfs(int v, vector<vector<int>> aj[], int cl, int cr) { if (cl > p || cr > q) return; if (v == n + 1) { f |= (cl <= p && cr <= q); } else { for (auto& u : aj[v]) { if (f) return; dfs(u[0], aj, cl + u[1], cr + u[2]); } } } bool che(int mi) { vector<vector<int>> aj[sz]; for (int i = 1; i <= n; i ++) { int d = lower_bound(a + 1, a + n + 1, a[i] + mi) - &a[i]; int c = lower_bound(a + 1, a + n + 1, a[i] + 2 * mi) - &a[i]; aj[i].push_back({i + d, 1, 0}); aj[i].push_back({i + c, 0, 1}); } f = false; dfs(1, aj, 0, 0); return f; } signed main() { cin.tie(nullptr)->sync_with_stdio(false); cin >> n >> p >> q; for (int i = 1; i <= n; i ++) { cin >> a[i]; } sort(a + 1, a + n + 1); a[n + 1] = inf; int d = (a[n] - a[1]); int le, ri; le = d / (p + q) / 2, ri = d / (p + q) + 10; while (1 < ri - le) { int mi = le + (ri - le) / 2; if (che(mi)) { ri = mi; } else { le = mi; } } cout << ri << '\n'; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...