#include <bits/stdc++.h>
using namespace std;
long long const INF=1e18;
int const MAX=1e5+5;
int const LOG=20;
int n;
int ub(int x){
return x&(-x);
}
void maxself(long long& x,long long val){
if(x<val)
x=val;
}
struct AIB{
long long maxim[MAX];
int n;
void init(int n){
this->n=n;
int i;
for(i=1;i<=n;++i)
maxim[i]=-INF;
}
void upd(long long val,int poz){
while(poz<=n){
maxself(maxim[poz],val);
poz+=ub(poz);
}
}
int bin_search(long long val){
int poz=0;
int i;
for(i=LOG-1;i>=0;--i)
if(poz+(1<<i)<=n && maxim[poz+(1<<i)]<val)
poz+=(1<<i);
return poz;
}
}aib;
int x[MAX];
long long sumg[MAX],sumd[MAX];
void read(){
cin>>n;
int i;
for(i=1;i<=n;++i){
cin>>x[i]>>sumg[i]>>sumd[i];
sumg[i]+=sumg[i-1];
sumd[i]+=sumd[i-1];
}
}
long long solve(){
long long ans=0;
int i;
aib.init(n);
for(i=1;i<=n;++i){
aib.upd(x[i]-sumd[i-1],i);
int poz=aib.bin_search(x[i]-sumd[i]);
maxself(ans,sumg[i]-sumg[poz]);
}
return ans;
}
int main()
{
read();
cout<<solve();
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... |