#include<bits/stdc++.h>
using namespace std;
#define ll long long
#define pb push_back
#define pii pair<int, int>
#define xx first
#define yy second
#define endl "\n"
ll n, x[100010], g[100010], e[100010], ress, prefG[100010];
set<pii> s;
int main()
{
ios_base::sync_with_stdio(false); cin.tie(0); cout.tie(0);
cin>>n;
for (int i=0; i<n; i++) cin>>x[i]>>g[i]>>e[i];
prefG[0]=g[0];
for (int i=1; i<n; i++)
{
prefG[i]=prefG[i-1]+g[i];
}
ll energy=0, dist=0;
s.insert({0-x[0], 0});
ress=max(ress, prefG[0]);
for (int i=1; i<n; i++)
{
if (i) energy+=e[i-1];
dist=x[i];
//cout<<energy<<" "<<dist<<endl;
//if (i==0) ress=max(ress, g[0]);
pair<ll, ll> p;
auto it=s.upper_bound({energy+e[0]-x[i], 0});
if (it==s.end())
{
//cout<<"ee"<<i<<endl;
p=*s.rbegin();
}
else
{
//cout<<"eee"<<i<<endl;
if (it!=s.begin())
{
//cout<<"r"<<i<<endl;
it--;
p=*it;
}
else
{
s.insert({energy-dist, -i});
continue;
}
//pii p;
}
ll trRess=prefG[i];
if (-p.yy>0) trRess-=prefG[-p.yy-1];
//cout<<trRess<<endl;
ress=max(ress, trRess);
//cout<<"ubacujem "<<energy-dist<<" "<<-i<<endl;
s.insert({energy-dist, -i});
}
for (int i=0; i<n; i++) ress=max(ress, g[i]);
/*for (int i=0; i<n; i++)
{
ll trGold=0, trEnergy=0, trDist=0;
for (int j=i; j<n; j++)
{
trDist=x[j]-x[i];
trEnergy+=e[j];
trGold+=g[j];
//cout<<i<<" "<<j<<" "<<trDist<<" "<<trGold<<" "<<trEnergy<<endl;
if (trEnergy>=trDist) ress=max(ress, trGold);
}
}*/
cout<<ress;
}
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
1 ms |
384 KB |
Output is correct |
2 |
Incorrect |
0 ms |
384 KB |
Output isn't correct |
3 |
Halted |
0 ms |
0 KB |
- |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
1 ms |
384 KB |
Output is correct |
2 |
Incorrect |
0 ms |
384 KB |
Output isn't correct |
3 |
Halted |
0 ms |
0 KB |
- |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
1 ms |
384 KB |
Output is correct |
2 |
Incorrect |
0 ms |
384 KB |
Output isn't correct |
3 |
Halted |
0 ms |
0 KB |
- |