제출 #685595

#제출 시각아이디문제언어결과실행 시간메모리
685595speedyArda금 캐기 (IZhO14_divide)C++14
100 / 100
119 ms7780 KiB
#include "bits/stdc++.h"

using namespace std;
using ll = long long;
const int MAXN = 1e5+5;
ll maxi[MAXN], pref[MAXN], prefgold[MAXN];
struct camps 
{
    ll x = 0, g = 0, d = 0;
    
} in[MAXN];


int main() 
{
    int n;
    cin >> n;
    in[0].x = in[0].g = in[0].d = 0;
    ll curr = 0;
    //mini[0] = 1e18;
    pref[0] = 0;
    prefgold[0] = 0;
    for(int i = 1; i <= n; i++) {
        cin >> in[i].x >> in[i].g >> in[i].d;
        curr = in[i].d - (in[i].x - in[i-1].x);
       // mini[i] = min(mini[i - 1], curr);
        pref[i] = curr + pref[i - 1];
        prefgold[i] = in[i].g + prefgold[i - 1];
    }
    maxi[n] = pref[n];
    for(int i = n - 1; i >= 0; i--)
    {
        maxi[i] = maxi[i + 1];

        maxi[i] = max(maxi[i+1], pref[i]);
    }
   // for(int i = 1; i <= n; i++)
        //cout << maxi[i] << " ";
   // cout << "\n";
    //ll l = 1, r = 1e9;
    ll ans = 0;
    for(int beg = 1; beg <= n; beg++)
    {
        int l = beg, r = n;
        while(l <= r)
        {
            int m = (l + r) / 2;

            ll ch = maxi[m] - pref[beg];
            if(ch + in[beg].d >= 0)
            {
                ans = max(ans, prefgold[m] - prefgold[beg - 1]);
                l = m + 1;
            } else
                r = m - 1;
        }
    }
   

    cout << ans << "\n";
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...