제출 #1183450

#제출 시각아이디문제언어결과실행 시간메모리
1183450peteza금 캐기 (IZhO14_divide)C++20
17 / 100
0 ms328 KiB
#include <bits/stdc++.h> using namespace std; using ll = long long; int n; ll x[100005], g[100005], d[100005], val[100005]; ll qsg[100005]; ll ans = LLONG_MIN; ll segm[400005]; void upd(int idx, int l, int r, int tgt, ll val) { if(l == r) {segm[idx] = max(segm[idx], val); return;} int mid = (l+r) >> 1; if(tgt <= mid) upd(idx*2+1, l, mid, tgt, val); else upd(idx*2+2, mid+1, r, tgt, val); segm[idx] = max(segm[idx*2+1], segm[idx*2+2]); } ll qr(int idx, int l, int r, int tl, int tr) { if(tl <= l && r <= tr) return segm[idx]; if(tr < l || r < tl) return LLONG_MIN; int mid = (l+r) >> 1; return max(qr(idx*2+1, l, mid, tl, tr), qr(idx*2+2, mid+1, r, tl, tr)); } int main() { cin.tie(0) -> sync_with_stdio(0); cin >> n; vector<ll> diffval; for(int i=1;i<=n;i++) { cin >> x[i] >> g[i] >> d[i]; qsg[i] = qsg[i-1] + g[i]; val[i] = val[i-1] + d[i] - (x[i] - x[i-1]); diffval.emplace_back(val[i]); } sort(diffval.begin(), diffval.end()); diffval.resize(unique(diffval.begin(), diffval.end()) - diffval.begin()); for(int i=n;i>=1;i--) { int cpos = lower_bound(diffval.begin(), diffval.end(), val[i] - d[i]) - diffval.begin(); upd(0, 0, diffval.size()-1, cpos, qsg[i]); ans = max(ans, qr(0, 0, diffval.size()-1, cpos, diffval.size()-1) - qsg[i-1]); } cout << ans; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...