#include <bits/stdc++.h>
#define int long long
#define F first
#define S second
#define pb push_back
using namespace std;
const int N = 200000 + 10;
const int inf = 1e15;
const int mod = 1e9 + 7;
int st[N * 4];
void build(int node,int tl,int tr) {
st[node] = inf;
if(tl == tr) return;
int mid = (tl + tr) / 2;
build(node * 2,tl,mid);
build(node * 2 + 1,mid + 1,tr);
}
void modify(int node,int tl,int tr,int i,int v) {
if(tl > i || tr < i) return;
if(tl == tr) {
st[node] = min(st[node],v);
return;
}
int mid = (tl + tr) / 2;
modify(node * 2,tl,mid,i,v);
modify(node * 2 + 1,mid + 1,tr,i,v);
st[node] = min(st[node * 2],st[node * 2 + 1]);
}
int get(int node,int tl,int tr,int l,int r) {
if(tl > r || tr < l) return inf;
if(tl >= l && tr <= r) return st[node];
int mid = (tl + tr) / 2;
return min(get(node * 2,tl,mid,l,r),get(node * 2 + 1,mid + 1,tr,l,r));
}
signed main() {
ios_base::sync_with_stdio(false);
cin.tie(NULL);
int n;
cin >> n;
vector<int>x(n + 1),g(n + 1),e(n + 1),xs;
vector<vector<int>>id(n + 1,vector<int>(2));
for(int i = 1; i <= n; i++) {
cin >> x[i] >> g[i] >> e[i];
g[i] += g[i - 1];
e[i] += e[i - 1];
id[i][0] = e[i] - x[i];
id[i][1] = e[i - 1] - x[i];
xs.pb(e[i] - x[i]);
xs.pb(e[i - 1] - x[i]);
}
sort(xs.begin(),xs.end());
xs.erase(unique(xs.begin(),xs.end()),xs.end());
for(int i = 1; i <= n; i++) {
id[i][0] = lower_bound(xs.begin(),xs.end(),id[i][0]) - xs.begin() + 1;
id[i][1] = lower_bound(xs.begin(),xs.end(),id[i][1]) - xs.begin() + 1;
}
build(1,1,n * 2);
int res = 0;
for(int i = 1; i <= n; i++) {
modify(1,1,n * 2,id[i][1],g[i - 1]);
res = max(res,g[i] - get(1,1,n * 2,1,id[i][0]));
}
//e[i]-x[i] >= e[j - 1] - x[j]
cout << res;
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... |