#include <bits/stdc++.h>
using namespace std;
#define endl "\n"
#define mod 1000000007
#define int long long
const int N=(1<<17);
int Tree[N*2+1];
int pre[200001];
int x[200001],g[200001],e[200001],n;
map <int,int> key;
set <int> st;
void update(int i,int idx){
i+=N;
Tree[i]=min(Tree[i],idx);
i/=2;
while(i!=0){
Tree[i]=min(Tree[i*2],Tree[i*2+1]);
i/=2;
}
return;
}
int solve(int l1,int r1,int i,int l,int r){
if(l1>r||l>r1) return 1e15;
if(l<=l1&&r1<=r) return Tree[i];
return min(solve(l1,(l1+r1)/2,i*2,l,r),solve((l1+r1)/2+1,r1,i*2+1,l,r));
}
void comp(){
int k=0;
for(int j:st){
key[j]=k++;
}
return;
}
signed main()
{
ios_base::sync_with_stdio(false);
cin.tie(NULL);
cout.tie(NULL);
for(int i=0;i<N*2+1;i++) Tree[i]=1e15;
cin>>n;
int sum=0,ans=0;
for(int i=1;i<=n;i++){
cin>>x[i]>>g[i]>>e[i];
st.insert(sum-x[i]);
sum+=e[i];
st.insert(sum-x[i]);
}
comp();
sum=0;
for(int i=1;i<=n;i++){
pre[i]=pre[i-1]+g[i];
update(key[sum-x[i]],i);
int idx=solve(0,N-1,1,0,key[sum+e[i]-x[i]]);
//cout<<sum-x[i]<<endl;
ans=max(ans,pre[i]-pre[idx-1]);
sum+=e[i];
}
cout<<ans<<endl;
return 0;
}
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |