Submission #1182009

#TimeUsernameProblemLanguageResultExecution timeMemory
1182009woohyun_jngDivide and conquer (IZhO14_divide)C++20
100 / 100
50 ms6024 KiB
#include <bits/stdc++.h> #define int long long using namespace std; typedef array<int, 2> pr; const int MAX = 100001; const int INF = 0x3f3f3f3f3f3f3f3f; int G[MAX], D[MAX], X[MAX], ans; void dnc(int l, int r) { if (l == r) return; int m = l + r >> 1, V; vector<pr> arr, st; for (int i = l; i <= m; i++) arr.push_back({D[i - 1] - X[i], -G[i - 1]}); sort(arr.begin(), arr.end()); for (pr i : arr) { if (!st.empty() && st.back()[1] >= i[1]) continue; st.push_back(i); } for (int i = m + 1; i <= r; i++) { V = lower_bound(st.begin(), st.end(), (pr){D[i] - X[i], INF}) - st.begin() - 1; if (V < 0) continue; ans = max(ans, G[i] + st[V][1]); } dnc(l, m), dnc(m + 1, r); } signed main() { ios_base::sync_with_stdio(false); cin.tie(0), cout.tie(0); int N; cin >> N; for (int i = 1; i <= N; i++) { cin >> X[i] >> G[i] >> D[i], ans = max(ans, G[i]); G[i] += G[i - 1], D[i] += D[i - 1]; } dnc(1, N); cout << ans << '\n'; return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...