Submission #1155837

#TimeUsernameProblemLanguageResultExecution timeMemory
1155837dostsDivide and conquer (IZhO14_divide)C++20
100 / 100
56 ms10568 KiB
#include <bits/stdc++.h> #pragma GCC optimize("O3,unroll-loops") #pragma GCC target("avx2") using namespace std; #define int long long #define pii pair<int,int> #define ff first #define ss second #define sp << " " << #define all(cont) cont.begin(),cont.end() #define vi vector<int> const int inf = 1e18,N = 3e3+1,MOD = 998244353; void solve() { int n; cin >> n; vi x(n+1),g(n+1),d(n+1); for (int i=1;i<=n;i++) cin >> x[i] >> g[i] >> d[i]; set<pii> st; auto ins = [&](int x,int y) { auto it = st.lower_bound({x,y}); if (it != st.end() && it->ss >= y) return; st.insert({x,y}); it = st.lower_bound({x,y}); while (it != st.begin() && prev(it)->ss <= y) st.erase(prev(it)); }; auto get = [&](int x) { auto it = st.lower_bound({x,0}); if (it == st.end()) return 0ll; return it->ss; }; vi p(n+1,0),gp(n+1,0); for (int i=1;i<=n;i++) p[i] = p[i-1]+d[i]; for (int i=1;i<=n;i++) gp[i] = gp[i-1]+g[i]; int ans = 0; for (int i=n;i>=1;i--) { ins(p[i]-x[i],gp[i]); int v = get(p[i-1]-x[i]); ans = max(ans,v-gp[i-1]); } cout << ans << '\n'; } int32_t main() { ios_base::sync_with_stdio(0);cin.tie(0);cout.tie(0); #ifdef Dodi freopen("in.txt","r",stdin); freopen("out.txt","w",stdout); #endif int t = 1; //cin >> t; while (t --> 0) solve(); }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...