제출 #17448

#제출 시각아이디문제언어결과실행 시간메모리
17448elgun1999금 캐기 (IZhO14_divide)C++98
100 / 100
68 ms6408 KiB
#include <iostream>
#include <algorithm>
#include <cstdio>
#define f first
#define s second
#define mp make_pair
#define pb push_back
#define ll long long

using namespace std;

ll n, x[100005], g[100005], e[100005], p[100005], ans;
pair<ll, ll> d[100005];

int main()
{
    //freopen("divide.in", "r", stdin);
    //freopen("divide.out", "w", stdout);

    scanf("%d", &n);
    for (int i = 1; i <= n; i++) {
        scanf("%d %d %d", &x[i], &g[i], &e[i]);
        g[i] += g[i - 1], e[i] += e[i - 1];
        d[i] = {e[i] - x[i], i};
    }
    sort(d + 1, d + n + 1);
    for (int i = n; i >= 1; i--)
        p[i] = max(p[i + 1], d[i].s);

    for (int i = 1; i <= n; i++) {
        int a = e[i - 1] - x[i];
        int l = 0, r = n + 1;
        while(r - l > 1) {
            int mid = (l + r) / 2;
            if (d[mid].f >= a) r = mid;
            else l = mid;
        }
        a = p[r];
        ans = max(ans, g[a] - g[i - 1]);
    }
    cout << ans;

    return 0;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...