Submission #1221376

#TimeUsernameProblemLanguageResultExecution timeMemory
1221376PenguinsAreCuteTwo Dishes (JOI19_dishes)C++17
74 / 100
3374 ms135096 KiB
#include <bits/stdc++.h> using namespace std; struct seg { vector<long long> val, lazy; int n, h; seg(int _n): n(_n), h(32-__builtin_clz(_n)), val(2*_n,0), lazy(_n,0) {} void app(int x, long long k) { val[x] += k; if(x < n) lazy[x] += k; } void calc(int x) { val[x] = max(val[x<<1],val[x<<1|1]) + lazy[x]; } void push(int x) { for(int i=h;i;i--) { int y = (x >> i); app(y<<1,lazy[y]); app(y<<1|1,lazy[y]); lazy[y] = 0; } } void build(int x) { while(x>>=1) calc(x); } void up(int l, int r, long long x) { int l0 = (l+=n); int r0 = (r+=n); push(l0); push(r0); for(r++;l<r;l>>=1,r>>=1) { if(l&1) app(l++,x); if(r&1) app(--r,x); } build(l0); build(r0); } long long qry(int l, int r) { push(l+=n); push(r+=n); long long ans = 0; for(r++;l<r;l>>=1,r>>=1) { if(l&1) ans=max(ans,val[l++]); if(r&1) ans=max(ans,val[--r]); } return ans; } }; int main() { int n, m; cin >> n >> m; long long a[n], s[n], b[m], t[m]; int p[n], q[m]; for(int i=0,trash;i<n;i++) cin >> a[i] >> s[i] >> p[i]; for(int i=0,trash;i<m;i++) cin >> b[i] >> t[i] >> q[i]; long long pa[n+1], pb[m+1]; pa[0] = pb[0] = 0; partial_sum(a,a+n,pa+1); partial_sum(b,b+m,pb+1); long long ans = 0; for(int i=0;i<n;i++) { s[i] = upper_bound(pb,pb+m+1,s[i]-pa[i+1])-pb-1; if(s[i] == m) { s[i] = -1; ans+=p[i]; } } vector<pair<int,int>> edge[n]; for(int i=0;i<m;i++) { t[i] = upper_bound(pa,pa+n+1,t[i]-pb[i+1])-pa-1; if(t[i] == n) { t[i] = -1; ans+=q[i]; } else if(~t[i]) edge[t[i]].push_back({i,q[i]}); } seg dp(m+1); for(int i=n;i--;) { if(~s[i]) { dp.up(s[i],s[i],dp.qry(s[i],m)+p[i]-dp.qry(s[i],s[i])); dp.up(0,s[i]-1,p[i]); } for(auto [j, qv]: edge[i]) dp.up(j+1,m,qv); } cout << ans + dp.qry(0,m); }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...