제출 #125677

#제출 시각아이디문제언어결과실행 시간메모리
125677minh_star금 캐기 (IZhO14_divide)C++14
100 / 100
56 ms7236 KiB
#include <bits/stdc++.h>
using namespace std;
const int maxn = 1e5 + 100;
long long x[maxn], g[maxn], r[maxn];
typedef pair<long long, int> ii;
ii a[maxn];
int n;
void readinp(){
    cin >> n;
    for (int i = 1; i <= n; i++){
        cin >> x[i] >> g[i] >> r[i];
    }
    for (int i = 1; i <= n; i++){
        r[i] = r[i-1] + r[i];
        g[i] = g[i-1] + g[i];
    }
}
void process(){
    for (int i = 1; i <= n; i++){
        a[i].first = r[i-1] - x[i];
        a[i].second = i;
    }
    sort(a+1, a+1+n);
    a[0].second = n + 1;
    for (int i = 1; i <= n; i++){
        a[i].second = min (a[i].second, a[i - 1].second);
    }
    long long ans = 0;
    for (int i = 1; i <= n; i++){
        long long w = r[i] - x[i];
        int l = 1;
        int r = n;
        int res = 1;
        while (l <= r){
            int mid = (l + r) >> 1;
            if (a[mid].first <= w){
                l = mid + 1;
                res = a[mid].second;
            }
            else{
                r = mid - 1;
            }
        }
        ans = max(ans, g[i] - g[res - 1]);
    }
    cout << ans;
}
int main(){
    ios_base::sync_with_stdio(false);
    cin.tie(0);
    readinp();
    process();
    return 0;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...