Submission #1288981

#TimeUsernameProblemLanguageResultExecution timeMemory
1288981WH8Divide and conquer (IZhO14_divide)C++20
100 / 100
114 ms9028 KiB
#include <bits/stdc++.h> using namespace std; #define int long long #define pll pair<int, int> #define mp make_pair #define pb push_back #define f first #define s second #define endl '\n' #define ld long double #define sz(x) static_cast<int>((x).size()) #define i5 tuple<int,int,int,int,int> signed main(){ int n;cin>>n; vector<int> x(n+1,0), e(n+1, 0), g(n+1, 0); set<pair<int,int>> s; for(int i=1;i<=n;i++){ cin>>x[i]>>g[i]>>e[i]; e[i]+=e[i-1], g[i]+=g[i-1]; } int ans=0; auto insert=[&](pair<int,int> a){ auto [x, y]=a; auto it=s.lower_bound({x, -1}); //~ printf("inserting %lld %lld\n", x, y); if(it!=s.end() and (*it).s <= y){ return; } it=s.upper_bound({x, 1e15}); while(it!=s.begin()){ it=prev(it); if((*it).s < y)break; s.erase(it); it=s.upper_bound({x, 1e15}); } s.insert(a); }; auto query=[&](int x)->int{ auto it=s.lower_bound({x, -1}); if(it!=s.end()){ return (*it).s; } else return 1e15; }; for(int i=1;i<=n;i++){ insert({x[i]-e[i-1],g[i-1]}); ans=max(ans, g[i]-query(x[i]-e[i])); //~ for(auto it : s){ //~ printf("(%lld %lld) ", it.f, it.s); //~ } //~ cout<<endl; } cout<<ans; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...