//Wa of course, please give me ac !!! im begging u compiler-sama, have mercy on my poor code !
#include <bits/stdc++.h>
using namespace std;
#define ll long long
#define db double
#define ld long double
#define endl '\n'
#define eb emplace_back
#define em emplace
#define pb push_back
#define pf push_front
#define pp pop_back
#define fr first
#define sc second
#define sz size
/*vector<bool> f(26 , true) ;
bool va[mn][mn] = {false};
bool vb[mn][mn] = {false};
ll dp[mn][mn];*/
const ll mn = 2e5 + 7 ;
ll n ;
ll p[mn] , g[mn] , e[mn] , sg[mn] , se[mn] , smx[mn] ;
pair<ll , ll> all[mn] ;
ll ans = 0 ;
/*
const ll mn = 1771;
ll lch[mn], rch[mn];
vector<ll> ed[mn];
deque<ll> rs[mn];
set<ll> v[mn];
bool us[mn];
pair<ll, ll> ar[mn];
ll prv[mn], rnk[mn];
bool lf[mn];
bool va[mn][mn] = {false};
bool vb[mn][mn] = {false};*/
/*
const ll mn = 5e5+10 ;
const ll mod = 1e9+7;
ll a[mn], fa[mn];
vector<tuple<ll, ll, ll>> ed;
ll find(ll x) {
return (x == fa[x])? x:(fa[x] = find(fa[x]));
}*/
//ll b[400014];
/*
string a[]= {"01" , "1" , "23456789", "0123456789"} ;
const ll mxn = 1e5 + 14 ;
const ll dx[] = {-1 , 0 , 1 , 0} ;
const ll dy[] = {0 , 1 , 0 , -1} ;
vector <ll> adj[mxn] ;
ll p[mxn][2] ;
*/
/*
ll bit(ll n){
for(ll i = 0 ; i < 32 ; i++) {if((! (n& (1 << i))) and n &(1 << ( i + 1))) return(i);}
}
*/
//ll n ,m ;vector<vector<ll>> dp ;
/*
const ll mx = 200014;
ll d[mx] ; ll e[mx];
vector<ll> a[mx];
vector <ll> aa[mx];
const ll md = 998244353;
ll n , k , u , v ;
*/
/*
ll cvp(ll n , ll k ,ll x , const vector<ll> & arr){
vector <ll> ps = cps(arr , n) ;
ll ts = ps[n] ;
ll count = 0 ;
for(ll s = 0 ; s < n ; s++) {
ll sm = 0 ;
for(ll c = 0 ; c < k ; c++) {
for(ll i = s; i < n ; i++) {
sm += arr[i] ;
if(sm >= x) {
count ++ ;
break ;
}
}
}
}
return count ;
}*/
/*
void upd(ll x ,ll f) {
if(x > mxi) mxi = x , cnt = f ;
else if(x == mxi) cnt += f ;
}
ll nx(string s){
cout << "next" ;
cout.flush();
for(auto i: s) cout << " " << i ;
cout << endl ;
cout.flush() ;
ll n ; cin >> n ;
for(ll i = 1 ; i <= n ;i++) cin >> s ;
return n ;
}
bool ip(const string& s) {
if(s == "1") return false ;
if(s.length() <= 18) {
ll nm = stoll(s) ;
if(nm < 2) return false ;
for(ll i = 2; i * i <= nm ;i++) if(nm % i == 0) return false ;
return true;
}
vector<ll> prm = {2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47,
53, 59, 61, 67, 71, 73, 79, 83, 89, 97, 101, 103, 107,
109, 113, 127, 131, 137, 139, 149, 151, 157, 163, 167,
173, 179, 181, 191, 193, 197, 199, 211, 223, 227, 229,
233, 239, 241, 251, 257, 263, 269, 271, 277, 281, 283,
293, 307, 311, 313, 317, 331, 337, 347, 349, 353, 359,
367, 373, 379, 383, 389, 397, 401, 409, 419, 421, 431,
433, 439, 443, 449, 457, 461, 463, 467, 479, 487, 491,
499, 503, 509, 521, 523, 541};
for(ll i : prm){
ll rm = 0 ;
for(char c:s) rm = (rm *10 + (c - '0')) % i ;
if(rm == 0) return false ;
}
return true;
}
*/
/*
double cc(const string& num) {
ll sod = 0;
for (char i : num) sod += i - '0';
double vl = 0;
for (char i : num) vl = vl * 10 + (i - '0');
double c = vl / sod;
return c;
}
*/
/*
ll mmdtv(const string& n) {
ll len = n.size() ;
ll mnr = len - 1;
double mc = 1e18;
for(ll m = 1 ; m < (1 << len) ; m++) {
string r ;
for(ll i = 0 ; i < len ; i++) if(m & (1 << i)) r += n[i] ;
if(!r.empty()) {
double c = cc(r) ;
ll rv = len - r.size();
if(c < mc || (abs(c - mc) < 1e-9 && rv < mnr)) {mc = c;mnr = rv; }
}
}
return mnr;
}
*/
/*
bool sv(ll c , ll i , vector <ll> &arr, vector<vector<ll>> &sm) {
if(i == n) return true ;
if(dp[c][i] != -1) return dp[c][i] ;
for(ll &j : sm[arr[i]]) {
if(j & c) continue ;
if(sv(j | c , i +1 , arr , sm)){ return dp[c][i] = 1 ; return true;}
}
dp[c][i] = 0 ;
return false ;
}
*/
/*
ll gp(ll lv, ll rw, ll cl) {
if (lv == 1) {
if (rw == 1 && cl == 1) return 1;
if (rw == 2 && cl == 2) return 2;
if (rw == 2 && cl == 1) return 3;
return 4;
}
ll hf = 1 << (lv - 1);
ll bc = 1LL << (2 * (lv - 1));
if (rw <= hf && cl <= hf)return gp(lv - 1, rw, cl);
if (rw > hf && cl > hf)return bc + gp(lv - 1, rw - hf, cl - hf);
if (rw > hf && cl <= hf)return 2 * bc + gp(lv - 1, rw - hf, cl);
return 3 * bc + gp(lv - 1, rw, cl - hf);
}
pair<ll , ll> getp(ll lv, ll ps) {
if (lv == 1) {
if (ps == 1) return {1, 1};
if (ps == 2) return {2, 2};
if (ps == 3) return {2, 1};
return {1, 2};
}
ll hf = 1 << (lv - 1);
ll bs = 1LL << (2 * (lv - 1));
if (ps <= bs)return getp(lv - 1, ps);
if (ps <= 2 * bs) {auto p = getp(lv - 1, ps - bs);return {p.fr + hf, p.sc + hf};}
if (ps <= 3 * bs) { auto p = getp(lv - 1, ps - 2 * bs);return {p.fr + hf, p.sc}; }
auto p = getp(lv - 1, ps - 3 * bs);
return {p.fr, p.sc + hf};
}
bool prime(ll n) {
if(n < 2) return false ;
for(ll i =2; i*i <= n ; i++) if(n % i == 0) return false ;
return true ;
}
void dfs(ll u , ll p) {
uf[u] = df[u] = 1 ;
for(ll v : g[u]) {
if(v== p) continue ;
dfs(v, u) ;
if(dn[u] < dn[v] + 1) dn[u] = dn[v] + 1 , df[u] = df[v] ;
else if(dn[u] == dn[v] + 1) df[u] += df[v] ;
}
}
void dfs1 (ll u, ll p) {
vector<array <ll , 2>> v ;
v.pb({up[u] , uf[u]}) ;
for(ll x : g[u]) if(x != p) v.pb({dn[x] + 1 , df[x]}) ;
sort(v.rbegin() , v.rend()) ;
if(g[u].sz() > 2) {
ll a =v[0][0] , b = v[1][0] ,c = v[2][0] ;
ll val = a* (b +c) ;
if(a != b && b != c) {
ll s= 0 ;
for(auto [l ,f] : v)if(l == c) s += f ;
upd(val, v[1][1] * s) ;
}
else if(a == b && b == c){
ll s = 0 ;
ll r = 0;
for(auto [l ,f] : v) if(l == c) s+= f;
for(auto [l , f] : v) if(l == c) r += f*(s - f) ;
upd(val , r/2) ;
}
else if(a == b) {
ll s = 0 ;
for(auto [l ,f] : v) if(l == c) s += f;
upd(val , (v[0][1] + v[1][1]) * s) ;
}
else if(b == c){
ll s= 0 , r = 0 ;
for(auto [l ,f] : v) {
if(l == c) s += f;
}
for(auto[l ,f] : v) if(l == c) r += f*(s - f);
upd(val , r /2) ;
}
}
ll a1 = 0, a2 = 0 ;
for(auto [l , f] : v) if(l == v[0][0]) a1 += f;
for(auto [l , f] : v) if(l == v[1][0]) a2 += f;
for(ll x : g[u]){
if(x == p) continue ;
ll len = dn[x] + 1;
if(len == v[0][0]) {
a1 -= df[x] ;
if (a1 == 0)up[x] = v[1][0] + 1, uf[x] = a2;
else up[x] = v[0][0] + 1, uf[x] = a1;
}
else up[x] = v[0][0] + 1 , uf[x] = a1 ;
dfs1(x , u);
}
}*/
signed main() {
ios::sync_with_stdio(0);
cin.tie(0) ; cout.tie(0);
/*ll n, k;
cin >> n >> k;
vector<ll> a(n);
for (ll i = 0; i < n; i++)cin >> a[i];
if (k == 1) {
ll tt = 0;
for (ll nm : a) tt += nm;
cout << tt << endl;
return 0;
}
ll lm = n -k + 1;
vector<ll> pr(n + 1, 0);
for (ll i = 0; i < n; i++) pr[i + 1] = pr[i] + a[i];
deque<ll> dq;
ll ms = 1e18;
for (ll i = 0; i < n; i++) {
ll cs = max(0LL, i - lm + 1);
while (!dq.empty() && dq.front() < cs) dq.pop_front();
while (!dq.empty() && pr[i] >= pr[dq.back()])dq.pp();
dq.pb(i);
ll cmp = pr[dq.front()];
ll css = pr[i + 1] - cmp;
if (css < ms) ms = css;
}
cout << ms << endl;*/
/*
cin >> n >> m ;
f[1] = p[1] = 1;
for(ll i = 2 ; i<= n ;i++) {
f[i] = mo(f[i- 1] , f[i -2]) ;
p[i] = mo(f[i] , p[i - 1]) ;
}
for(ll i = 1 ; i<= n ; i++) {
cin >> a[i] ;
a[i] = mo(a[i] , a[i - 1]) ;
}
for(ll i =0 ; i<m ;i++) {
ll t , l , r ;
cin >> t >> l >> r ;
if(l > r) swap(l , r) ;
if(t == 1) {
up.pb({l , r}) ;
if((ll)up.sz() == 700) au() ;
}
else{
ll ans = mo(a[r] , -a[l -1]) ;
for(ll j = 0 ; j < (ll)up.sz() ; j++) {
ll l_ = up[j].fr ;
ll r_ = up[j].sc ;
ll lft = max(l , l_) - l_ + 1 ;
ll rgt = min(r , r_) - l_ + 1 ;
if(lft <= rgt) ans = mo(ans , mo(p[rgt] , -p[lft - 1]));
}
cout << ans % md << endl ;
}
}*/
//char s[200014] ;
/*ll t;
cin >>t ;
while(t--) {
ll n ; cin >> n ;
}
*/
cin >> n;
for(ll i = 1 ; i <= n ; i++) {
cin >> p[i] >>g[i] >> e[i] ;
sg[i] = sg[i - 1] + g[i] ;
se[i] = se[i - 1] + e[i] ;
all[i] = {se[i] - p[i] , i} ;
}
sort(all + 1 , all + n + 1) ;
for(ll i = n ; i >= 1 ; i--) smx[i] = max(smx[i + 1] , all[i].second) ;
for(ll i = 1 ; i <= n ;i ++){
ll k = se[i - 1] - p[i] ;
ll l = lower_bound(all + 1 , all + n + 1 , make_pair(k , 0LL)) - all ;
ll nxt = smx[l] ;
ans = max(ans , sg[nxt] - sg[i - 1]) ;
}
cout << ans << endl ;
/*while(true){ll ans = nx(a[0]) ; ans = nx(a[1]) ; if(ans == 2) break;}
while(true) {ll ans = nx(a[3]) ;if(ans == 1) break ;}
cout << "done" << endl ;
cout.flush() ;*/
//ll t; cin >> t ;
//while(t--){
/*ll n ;
cin >> n ;
ll q ;
cin >> q ;
while(q--) {
string s;
cin >> s ;
if(s == "->") {ll x ,y ; cin >> x >>y ; cout << gp(n , x ,y) << endl ;}
else {ll d ; cin >> d ; pair<ll , ll> p = getp(n , d) ; cout << p.fr << " " << p.sc << endl;}
}*/
/*string n ; cin >> n ;
//cout << mmdtv(n) << endl ;
//i'll try another bad idea
//ok
ll mx = 0 ;
ll count = 0 ;
for(auto i : n) {
if(i == '0') count ++ ;
else mx = max(mx, count + 1) ;
}
cout << n.sz() - mx << 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... |