제출 #441187

#제출 시각아이디문제언어결과실행 시간메모리
441187zxcvbnm금 캐기 (IZhO14_divide)C++14
100 / 100
48 ms9416 KiB
#include <bits/stdc++.h> using namespace std; using ll = long long; struct S { ll x, g, e; }; int main() { ios_base::sync_with_stdio(false); cin.tie(nullptr); int n; cin >> n; vector<S> a(n); for(int i = 0; i < n; i++) { cin >> a[i].x >> a[i].g >> a[i].e; } vector<S> pref(n+1, {0, 0, 0}); for(int i = 1; i <= n; i++) { pref[i] = {a[i-1].x, pref[i-1].g+a[i-1].g, pref[i-1].e+a[i-1].e}; } // ll ans = 0; // for(int i = 1; i <= n; i++) { // for(int j = i; j <= n; j++) { //// cout << i << " " << j << " " << pref[j].x-pref[i-1].x << " " << pref[j].e-pref[i-1].e << " " << pref[j].g-pref[i-1].g << "\n"; // if (pref[j].x-pref[i].x <= pref[j].e-pref[i-1].e) { // ans = max(ans, pref[j].g-pref[i-1].g); // } // } // } ll ans = 0; priority_queue<pair<ll, int>, vector<pair<ll, int>>, greater<pair<ll, int>>> q; int l = 1; for(int i = 1; i <= n; i++) { if (pref[i].x-pref[l].x <= pref[i].e-pref[l-1].e) { ans = max(ans, pref[i].g-pref[l-1].g); } else { ll need = (pref[i].x-pref[l].x) - (pref[i].e-pref[l-1].e); q.push({need, i}); } } ll delta = 0; for(int i = 2; i <= n; i++) { ll lose = a[i-2].e; ll gain = a[i-1].x - a[i-2].x; delta += gain - lose; while(!q.empty()) { auto v = q.top(); if (v.first <= delta) { q.pop(); ans = max(ans, pref[v.second].g - pref[i-1].g); } else { break; } } } cout << ans << "\n"; return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...