#include <bits/stdc++.h>
using namespace std;
#define int long long
#define pll pair<int, int>
#define mp make_pair
#define pb push_back
#define f first
#define s second
#define endl '\n'
#define ld long double
#define sz(x) static_cast<int>((x).size())
#define i5 tuple<int,int,int,int,int>
signed main(){
int n;cin>>n;
vector<int> x(n+1,0), e(n+1, 0), g(n+1, 0);
set<pair<int,int>> s;
for(int i=1;i<=n;i++){
cin>>x[i]>>g[i]>>e[i];
e[i]+=e[i-1], g[i]+=g[i-1];
}
int ans=0;
auto insert=[&](pair<int,int> a){
auto [x, y]=a;
auto it=s.lower_bound({x, -1});
//~ printf("inserting %lld %lld\n", x, y);
if(it!=s.end() and (*it).s <= y){
return;
}
it=s.upper_bound({x, 1e15});
while(it!=s.begin()){
it=prev(it);
if((*it).s < y)break;
s.erase(it);
it=s.upper_bound({x, 1e15});
}
s.insert(a);
};
auto query=[&](int x)->int{
auto it=s.lower_bound({x, -1});
if(it!=s.end()){
return (*it).s;
}
else return 1e15;
};
for(int i=1;i<=n;i++){
insert({x[i]-e[i-1],g[i-1]});
ans=max(ans, g[i]-query(x[i]-e[i]));
//~ for(auto it : s){
//~ printf("(%lld %lld) ", it.f, it.s);
//~ }
//~ cout<<endl;
}
cout<<ans;
}
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |