Submission #1198293

#TimeUsernameProblemLanguageResultExecution timeMemory
1198293og_matveychick1Sparklers (JOI17_sparklers)C++20
100 / 100
66 ms6628 KiB
#include "bits/stdc++.h" using namespace std; typedef long long ll; typedef pair<ll, ll> pll; const ll N = 1e5 + 5; ll n, k, t, a[N], b[N]; bool check(vector<pll> l, vector<pll> r) { ll il = 0, ir = 0; while (il != l.size() - 1 || ir != r.size() - 1) { if (il != l.size() - 1 && r[ir].first <= l[il + 1].second) il++; else if (ir != r.size() - 1 && l[il].first >= r[ir + 1].second) ir++; else return 0; } return 1; } bool check(ll s) { if (s * t > 1e9) return 1; for (ll i = 0; i < n; i++) b[i] = a[i] - 2 * s * t * i; vector<pll> L1, L2, R1, R2; L1 = {{b[k], b[k]}}, R1 = L1; L2 = {{b[0], b[0]}}, R2 = {{b[n - 1], b[n - 1]}}; ll gl = max_element(b, b + k + 1) - b, gr = min_element(b + k, b + n) - b, f, x; x = b[k]; f = 1e18; for (ll i = k - 1; i >= gl; i--) { f = min(f, b[i]); if (b[i] >= x) L1.push_back({b[i], f}), f = 1e18, x = b[i]; } x = b[k]; f = -1e18; for (ll i = k + 1; i <= gr; i++) { f = max(f, b[i]); if (b[i] <= x) R1.push_back({b[i], f}), f = -1e18, x = b[i]; } x = b[0]; f = 1e18; for (ll i = 0; i <= gl; i++) { f = min(f, b[i]); if (b[i] >= x) L2.push_back({b[i], f}), f = 1e18, x = b[i]; } x = b[n - 1]; f = -1e18; for (ll i = n - 1; i >= gr; i--) { f = max(f, b[i]); if (b[i] <= x) R2.push_back({b[i], f}), f = -1e18, x = b[i]; } return check(L1, R1) & check(L2, R2); } signed main() { ios::sync_with_stdio(0), cin.tie(0), cout.tie(0); cin >> n >> k >> t, k--; for (ll i = 0; i < n; i++) cin >> a[i]; ll l = -1, r = 1e9 / t + 5; check(2); while (l + 1 < r) { ll m = (l + r) / 2; (check(m) ? r : l) = m; } cout << r; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...