Submission #759865

#TimeUsernameProblemLanguageResultExecution timeMemory
759865TrunktyDivide and conquer (IZhO14_divide)C++14
100 / 100
28 ms11004 KiB
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
#define int ll

int n,ans;
int x[100005],g[100005],preg[100005],d[100005];

signed main(){
    ios::sync_with_stdio(false);
    cin.tie(NULL);
    cin >> n;
    for(int i=1;i<=n;i++){
        cin >> x[i] >> g[i] >> d[i];
        preg[i] = preg[i-1]+g[i];
    }
    vector<vector<int>>v;
    x[0] = x[1];
    int curr=0;
    for(int i=1;i<=n;i++){
        curr -= (x[i]-x[i-1]);
        if(v.size()==0 or v.back()[0]>curr){
            v.push_back({curr,i});
        }
        curr += d[i];
        int low=0,high=v.size()-1;
        while(low!=high){
            int mid = (low+high)/2;
            if(v[mid][0]>curr){
                low = mid+1;
            }
            else{
                high = mid;
            }
        }
        ans = max(ans,preg[i]-preg[v[low][1]-1]);
    }
    cout << ans << "\n";
    return 0;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...