Submission #1135825

#TimeUsernameProblemLanguageResultExecution timeMemory
1135825domblyDivide and conquer (IZhO14_divide)C++20
100 / 100
60 ms14084 KiB
#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 timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...