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...