#include <bits/stdc++.h>
using namespace std;
#define ll long long
const int N=100000+100;
const ll inf=1e18;
ll x[N],e[N],g[N],fen[N*2];
void add(int x,ll p)
{
while(x<N)
{
fen[x]=min(fen[x],p);
x+=(x&-x);
}
}
ll get(int x)
{
ll ans=inf;
while(x>0)
{
ans=min(ans,fen[x]);
x-=(x&-x);
}
return ans;
}
int main()
{
ios::sync_with_stdio(0);
cout.tie(0);cin.tie(0);
int n;
cin>>n;
for(int i=1;i<=n;i++)
{
cin>>x[i]>>g[i]>>e[i];
g[i]+=g[i-1];
e[i]+=e[i-1];
}
set<ll> points;
for(int i=0;i<=n;i++)
{
points.insert(e[i]-x[i]);
if(i)
points.insert(e[i-1]-x[i]);
}
ll ans=-inf;
for(int i=0;i<2*N;i++)fen[i]=inf;
vector<ll> cpm(begin(points),end(points));
for(int i=0;i<=n;i++)
{
ll it=lower_bound(begin(cpm),end(cpm),e[i-1]-x[i])-begin(cpm)+1;
add(it,g[i-1]);
it=lower_bound(begin(cpm),end(cpm),e[i]-x[i])-begin(cpm)+1;
ll val=get(it);
// cout<<"At "<<it<<' '<<e[i]-x[i]<<endl;
ans=max(ans,g[i]-val);
}
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... |