제출 #1317367

#제출 시각아이디문제언어결과실행 시간메모리
1317367LIAGrowing Vegetables is Fun 5 (JOI24_vegetables5)C++17
0 / 100
2764 ms52108 KiB
// // Created by liasa on 29/01/2026. // #include <bits/stdc++.h> using namespace std; #define ll long long #define v vector #define lp(i, s, e) for (int i = s; i < e; ++i) ll n; v<ll> solve(v<ll> tp1, v<ll> tp2, ll d) { v<ll> res(n, 0); v<ll> ev(n + 1, 0); v<ll> LF(2 * n), RG(2 * n); ll idxl = 0, idxr = 0; lp(i, 0, 2 * n) { while (idxl < n && tp2[idxl] < tp1[i] - d) idxl++; while (idxr < n && tp2[idxr] <= tp1[i] + d) idxr++; LF[i] = idxl; RG[i] = idxr - 1; } v<ll> LOW(2 * n); ll s_r = 2 * n; for (ll i = 0; i < n; i++) { while (s_r > n && tp1[s_r - 1] < tp1[i]) s_r--; LOW[i] = i - s_r + n; } s_r = n; for (ll i = n; i < 2 * n; i++) { while (s_r > 0 && tp1[s_r - 1] > tp1[i]) s_r--; LOW[i] = s_r + n - i - 1; } lp(i, 0, n) { if (RG[i] < LOW[i]) continue; ll L = max(0LL, i - RG[i] + 1); ll R; if (LF[i] <= LOW[i]) R = i + 1; else R = i - LF[i] + 1; if (L < R) { ev[L]++; ev[R]--; } } for (ll i = n; i < 2 * n; i++) { if (RG[i] < LOW[i]) continue; ll L; if (LF[i] <= LOW[i]) L = i - n + 1; else L = i + LF[i] - n + 1; ll R = min(n, i + RG[i] - n + 1); if (L < R) { ev[L]++; ev[R]--; } } ll cur = 0; for (ll s = 0; s < n; s++) { cur += ev[s]; if (cur == n) res[s] = 1; } return res; } int main() { ios::sync_with_stdio(0); cin.tie(0); cin >> n; v<ll> a(2 * n), b(n), c(n); lp(i, 0, 2 * n) cin >> a[i]; lp(i, 0, n) cin >> b[i]; lp(i, 0, n) cin >> c[i]; sort(b.begin(), b.end()); sort(c.begin(), c.end()); v<ll> ra = a, rb = b, rc = c; lp(i, 0, n) swap(ra[i], ra[i + n]); lp(i, 0, 2 * n) ra[i] *= -1; reverse(rb.begin(), rb.end()); for (auto &x : rb) x = -x; reverse(rc.begin(), rc.end()); for (auto &x : rc) x = -x; ll l = 0, r = 1e18, ans = 1e18; while (l <= r) { ll mid = (l + r) / 2; v<ll> F1 = solve(a, b, mid); v<ll> F2 = solve(ra, rb, mid); v<ll> G1 = solve(a, c, mid); v<ll> G2 = solve(ra, rc, mid); bool ok = 0; lp(i, 0, n) { if ((F1[i] && G2[i]) || (F2[i] && G1[i])) { ok = 1; } } if (ok) { ans = min(ans, mid); r = mid - 1; } else l = mid + 1; } cout << ans << endl; return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...