Submission #1162247

#TimeUsernameProblemLanguageResultExecution timeMemory
1162247arkanefuryDivide and conquer (IZhO14_divide)C++20
100 / 100
27 ms5364 KiB
#include <bits/stdc++.h> using namespace std; #define pb push_back #define in insert #define lb lower_bound #define F first #define S second #define sz size() #define int long long #define all(v) v.begin(),v.end() #define FOR1(x, n) for(int j = x; j <= n; j ++) #define FOR(x, n, m, d) for(int x = n; x <= m; x += d) #define FORR(x, n, m, d) for(int x = n; x >= m; x -= d) #define nikita ios_base::sync_with_stdio(0), cin.tie(0); const int N = 5e5+5; int a[N], b[N], pref[N], d[N], c[N], ans, e[N], pref1[N]; int n,m,sum=0,x,y, r, cnt, l, mod = 998244353, inf = -1e18, k; string s, str; void dnc(int l = 1, int r = n){ if(l==r)ans = max(ans, b[l]); if(l >= r)return; int md = (l+r) >> 1; dnc(l, md), dnc(md+1, r); vector<int>v; int prefix = 0, prefix1 = 0; FORR(i, r, md+1, 1){ prefix = pref[i] - pref[md]; v.pb(a[i]-prefix); } int mn = 1e18; FOR(i,0,v.sz-1,1){ mn=min(mn,v[i]); d[i]=mn; } prefix = prefix1 = 0; FORR(i, md, l, 1){ prefix += c[i]; prefix1 += b[i]; int tl, tr, tm; tl = 0, tr = v.sz-1; k = a[i] + prefix; int res = -1; while(tl <= tr){ tm = (tl + tr) >> 1; if(d[tm] <= k)tr = tm - 1, res = tm; else tl = tm + 1; } if(res!=-1){ res = r-res; ans = max( pref1[res] - pref1[i-1], ans); } } } // pref[j] + suf[i] >= a[j] - a[i] // a[j] - pref[j] <= a[i] + suf[i] void solve(){ cin >> n; FOR(i,1,n,1){ cin>>a[i]>>b[i]>>c[i]; pref1[i] = pref1[i-1] + b[i]; pref[i] = pref[i-1] + c[i]; } dnc(); cout << ans; } signed main(){ nikita int tt = 1; if(!tt)cin >> tt; FOR(i, 1, tt, 1){ solve(); } }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...