답안 #709707

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
709707 2023-03-14T08:17:22 Z alvingogo Two Dishes (JOI19_dishes) C++14
74 / 100
6246 ms 319452 KB
#include <bits/stdc++.h>
#pragma GCC optimize("Ofast")
#define AquA cin.tie(0);ios_base::sync_with_stdio(0);
#define fs first
#define sc second
#define p_q priority_queue
#define int long long
using namespace std;

const int inf=1e18;
struct ST{
	vector<pair<int,int> > st;
	void init(int x){
		st.resize(4*x);
	}
	void upd(int v,int x){
		st[v].fs+=x;
		st[v].sc+=x;
	}
	void pudo(int v){
		upd(2*v+1,st[v].sc);
		upd(2*v+2,st[v].sc);
		st[v].sc=0;
	}
	void pull(int v){
		st[v].fs=max(st[2*v+1].fs,st[2*v+2].fs);
	}
	void update(int v,int L,int R,int l,int r,int k){
		if(L==l && r==R){
			upd(v,k);
			return;
		}
		int m=(L+R)/2;
		pudo(v);
		if(r<=m){
			update(2*v+1,L,m,l,r,k);
		}
		else if(l>m){
			update(2*v+2,m+1,R,l,r,k);
		}
		else{
			update(2*v+1,L,m,l,m,k);
			update(2*v+2,m+1,R,m+1,r,k);
		}
		pull(v);
	}
	int query(int v,int L,int R,int l,int r){
		if(L==l && r==R){
			return st[v].fs;
		}
		pudo(v);
		int m=(L+R)/2;
		if(r<=m){
			return query(2*v+1,L,m,l,r);
		}
		else if(l>m){
			return query(2*v+2,m+1,R,l,r);
		}
		else{
			return max(query(2*v+1,L,m,l,m),query(2*v+2,m+1,R,m+1,r));
		}
	}
}st;

struct BIT{
	int n;
	vector<int> bt;
	void init(int x){
		n=x;
		bt.resize(n+1);
	}
	void update(int x,int y){
		for(;x>0;x-=(x&-x)){
			bt[x]+=y;
		}
	}
	int query(int x){
		int ans=0;
		for(;x<=n;x+=(x&-x)){
			ans+=bt[x];
		}
		return ans;
	}
}bt,bt2;


bool cmp(pair<int,int> a,pair<int,int> b){
	return a.sc!=b.sc?a.sc<b.sc:a.fs<b.fs;
}
signed main(){
    AquA;
	//freopen("07-10.txt","r",stdin);
	//freopen("ans.txt","w",stdout);
	int n,m;
	cin >> n >> m;
	vector<int> a(n+1),b(m+1),s(n+1),t(m+1),p(n+1),q(m+1);
	for(int i=1;i<=n;i++){
		cin >> a[i] >> s[i] >> p[i];
		a[i]+=a[i-1];
	}
	for(int j=1;j<=m;j++){
		cin >> b[j] >> t[j] >> q[j];
		b[j]+=b[j-1];
	}
	vector<pair<int,int> > gg;
	vector<int> oka(n+1),okb(m+2);
	vector<pair<int,int> > to;
	vector<int> vis(n+2);
	for(int i=1;i<=n;i++){
		oka[i]=upper_bound(b.begin(),b.end(),s[i]-a[i])-b.begin()-1;
		if(oka[i]<0){
			continue;
		}
		to.push_back({oka[i],i});
	}
	for(int i=1;i<=m;i++){
		okb[i]=upper_bound(a.begin(),a.end(),t[i]-b[i])-a.begin()-1;
		if(okb[i]<0){
			q[i]=0;
			continue;
		}
		if(okb[i]>=n){
		}
		else{
			to.push_back({i-1,okb[i]+1});
		}
	}
	to.push_back({m,n+1});
	sort(to.begin(),to.end(),[&](pair<int,int> a,pair<int,int> b){
		return a.fs!=b.fs?a.fs<b.fs:a.sc>b.sc;
	});
	to.erase(unique(to.begin(),to.end()),to.end());
	gg=to;
	sort(gg.begin(),gg.end(),cmp);
	n=gg.size();
	vector<int> newp(n+1);
	for(auto &h:to){
		if(h.fs<0){
			continue;
		}
		int flag=-1;
		if(!vis[h.sc] && h.fs==oka[h.sc]){
			vis[h.sc]=1;
			flag=h.sc;
		}
		h.sc=lower_bound(gg.begin(),gg.end(),h,cmp)-gg.begin()+1;
		if(flag>=0){
			newp[h.sc]=p[flag];
		}
	}
	st.init(n+1);
	bt.init(n);
	bt2.init(n);
	st.update(0,0,n,1,n,-inf);
	for(int i=1;i<=n;i++){
		st.update(0,0,n,0,i-1,newp[i]);
		bt.update(i,newp[i]);
	}
	int l=0;
	vector<int> dp(n+1);
	for(int i=1;i<=m;i++){
		if(okb[i]>=0){
			okb[i]=lower_bound(gg.begin(),gg.end(),pair<int,int>(-inf,okb[i]+1),cmp)-gg.begin();
		}
	}
	for(int i=0;i<=m;i++){
		if(i>0 && i<=m && okb[i]>=0){
			st.update(0,0,n,0,okb[i],q[i]);
			bt2.update(okb[i],q[i]);
		}
		while(l<(int)to.size() && to[l].fs==i){
			int x=to[l].sc;
			dp[x]=st.query(0,0,n,0,x-1)-bt.query(x+1);
			st.update(0,0,n,x,x,dp[x]+inf-bt2.query(x));
			st.update(0,0,n,0,x-1,-newp[x]);
			bt.update(x,-newp[x]);
			l++;
		}
	}
	cout << dp[n] << "\n";
    return 0;
}
# 결과 실행 시간 메모리 Grader output
1 Correct 460 ms 47824 KB Output is correct
2 Correct 486 ms 49048 KB Output is correct
3 Correct 348 ms 40884 KB Output is correct
4 Correct 330 ms 33216 KB Output is correct
5 Correct 1 ms 320 KB Output is correct
6 Correct 452 ms 46884 KB Output is correct
7 Correct 92 ms 8136 KB Output is correct
8 Correct 242 ms 34980 KB Output is correct
9 Correct 359 ms 40936 KB Output is correct
10 Correct 432 ms 44760 KB Output is correct
11 Correct 323 ms 41788 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 212 KB Output is correct
2 Correct 1 ms 212 KB Output is correct
3 Correct 1 ms 212 KB Output is correct
4 Correct 1 ms 316 KB Output is correct
5 Correct 1 ms 212 KB Output is correct
6 Correct 1 ms 212 KB Output is correct
7 Correct 1 ms 212 KB Output is correct
8 Correct 1 ms 320 KB Output is correct
9 Correct 1 ms 212 KB Output is correct
10 Correct 1 ms 212 KB Output is correct
11 Correct 1 ms 212 KB Output is correct
12 Correct 1 ms 324 KB Output is correct
13 Correct 1 ms 320 KB Output is correct
14 Correct 1 ms 212 KB Output is correct
15 Correct 1 ms 212 KB Output is correct
16 Correct 1 ms 324 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 212 KB Output is correct
2 Correct 1 ms 212 KB Output is correct
3 Correct 1 ms 212 KB Output is correct
4 Correct 1 ms 316 KB Output is correct
5 Correct 1 ms 212 KB Output is correct
6 Correct 1 ms 212 KB Output is correct
7 Correct 1 ms 212 KB Output is correct
8 Correct 1 ms 320 KB Output is correct
9 Correct 1 ms 212 KB Output is correct
10 Correct 1 ms 212 KB Output is correct
11 Correct 1 ms 212 KB Output is correct
12 Correct 1 ms 324 KB Output is correct
13 Correct 1 ms 320 KB Output is correct
14 Correct 1 ms 212 KB Output is correct
15 Correct 1 ms 212 KB Output is correct
16 Correct 1 ms 324 KB Output is correct
17 Correct 4 ms 780 KB Output is correct
18 Correct 5 ms 972 KB Output is correct
19 Correct 6 ms 972 KB Output is correct
20 Correct 4 ms 724 KB Output is correct
21 Correct 6 ms 980 KB Output is correct
22 Correct 6 ms 976 KB Output is correct
23 Correct 7 ms 980 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 212 KB Output is correct
2 Correct 1 ms 212 KB Output is correct
3 Correct 1 ms 212 KB Output is correct
4 Correct 1 ms 316 KB Output is correct
5 Correct 1 ms 212 KB Output is correct
6 Correct 1 ms 212 KB Output is correct
7 Correct 1 ms 212 KB Output is correct
8 Correct 1 ms 320 KB Output is correct
9 Correct 1 ms 212 KB Output is correct
10 Correct 1 ms 212 KB Output is correct
11 Correct 1 ms 212 KB Output is correct
12 Correct 1 ms 324 KB Output is correct
13 Correct 1 ms 320 KB Output is correct
14 Correct 1 ms 212 KB Output is correct
15 Correct 1 ms 212 KB Output is correct
16 Correct 1 ms 324 KB Output is correct
17 Correct 4 ms 780 KB Output is correct
18 Correct 5 ms 972 KB Output is correct
19 Correct 6 ms 972 KB Output is correct
20 Correct 4 ms 724 KB Output is correct
21 Correct 6 ms 980 KB Output is correct
22 Correct 6 ms 976 KB Output is correct
23 Correct 7 ms 980 KB Output is correct
24 Correct 385 ms 41144 KB Output is correct
25 Correct 466 ms 53940 KB Output is correct
26 Correct 347 ms 41312 KB Output is correct
27 Correct 512 ms 53672 KB Output is correct
28 Correct 440 ms 44224 KB Output is correct
29 Correct 364 ms 41152 KB Output is correct
30 Correct 972 ms 64768 KB Output is correct
31 Correct 187 ms 20272 KB Output is correct
32 Correct 266 ms 34616 KB Output is correct
33 Correct 534 ms 40392 KB Output is correct
34 Correct 870 ms 60748 KB Output is correct
35 Correct 910 ms 64964 KB Output is correct
36 Correct 905 ms 63612 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 212 KB Output is correct
2 Correct 1 ms 212 KB Output is correct
3 Correct 1 ms 212 KB Output is correct
4 Correct 1 ms 316 KB Output is correct
5 Correct 1 ms 212 KB Output is correct
6 Correct 1 ms 212 KB Output is correct
7 Correct 1 ms 212 KB Output is correct
8 Correct 1 ms 320 KB Output is correct
9 Correct 1 ms 212 KB Output is correct
10 Correct 1 ms 212 KB Output is correct
11 Correct 1 ms 212 KB Output is correct
12 Correct 1 ms 324 KB Output is correct
13 Correct 1 ms 320 KB Output is correct
14 Correct 1 ms 212 KB Output is correct
15 Correct 1 ms 212 KB Output is correct
16 Correct 1 ms 324 KB Output is correct
17 Correct 4 ms 780 KB Output is correct
18 Correct 5 ms 972 KB Output is correct
19 Correct 6 ms 972 KB Output is correct
20 Correct 4 ms 724 KB Output is correct
21 Correct 6 ms 980 KB Output is correct
22 Correct 6 ms 976 KB Output is correct
23 Correct 7 ms 980 KB Output is correct
24 Correct 385 ms 41144 KB Output is correct
25 Correct 466 ms 53940 KB Output is correct
26 Correct 347 ms 41312 KB Output is correct
27 Correct 512 ms 53672 KB Output is correct
28 Correct 440 ms 44224 KB Output is correct
29 Correct 364 ms 41152 KB Output is correct
30 Correct 972 ms 64768 KB Output is correct
31 Correct 187 ms 20272 KB Output is correct
32 Correct 266 ms 34616 KB Output is correct
33 Correct 534 ms 40392 KB Output is correct
34 Correct 870 ms 60748 KB Output is correct
35 Correct 910 ms 64964 KB Output is correct
36 Correct 905 ms 63612 KB Output is correct
37 Correct 427 ms 41032 KB Output is correct
38 Correct 496 ms 53648 KB Output is correct
39 Correct 456 ms 44576 KB Output is correct
40 Correct 440 ms 44200 KB Output is correct
41 Correct 1 ms 212 KB Output is correct
42 Correct 924 ms 64468 KB Output is correct
43 Correct 493 ms 39884 KB Output is correct
44 Correct 836 ms 60220 KB Output is correct
45 Correct 958 ms 66124 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 212 KB Output is correct
2 Correct 1 ms 212 KB Output is correct
3 Correct 1 ms 212 KB Output is correct
4 Correct 1 ms 316 KB Output is correct
5 Correct 1 ms 212 KB Output is correct
6 Correct 1 ms 212 KB Output is correct
7 Correct 1 ms 212 KB Output is correct
8 Correct 1 ms 320 KB Output is correct
9 Correct 1 ms 212 KB Output is correct
10 Correct 1 ms 212 KB Output is correct
11 Correct 1 ms 212 KB Output is correct
12 Correct 1 ms 324 KB Output is correct
13 Correct 1 ms 320 KB Output is correct
14 Correct 1 ms 212 KB Output is correct
15 Correct 1 ms 212 KB Output is correct
16 Correct 1 ms 324 KB Output is correct
17 Correct 4 ms 780 KB Output is correct
18 Correct 5 ms 972 KB Output is correct
19 Correct 6 ms 972 KB Output is correct
20 Correct 4 ms 724 KB Output is correct
21 Correct 6 ms 980 KB Output is correct
22 Correct 6 ms 976 KB Output is correct
23 Correct 7 ms 980 KB Output is correct
24 Correct 385 ms 41144 KB Output is correct
25 Correct 466 ms 53940 KB Output is correct
26 Correct 347 ms 41312 KB Output is correct
27 Correct 512 ms 53672 KB Output is correct
28 Correct 440 ms 44224 KB Output is correct
29 Correct 364 ms 41152 KB Output is correct
30 Correct 972 ms 64768 KB Output is correct
31 Correct 187 ms 20272 KB Output is correct
32 Correct 266 ms 34616 KB Output is correct
33 Correct 534 ms 40392 KB Output is correct
34 Correct 870 ms 60748 KB Output is correct
35 Correct 910 ms 64964 KB Output is correct
36 Correct 905 ms 63612 KB Output is correct
37 Correct 427 ms 41032 KB Output is correct
38 Correct 496 ms 53648 KB Output is correct
39 Correct 456 ms 44576 KB Output is correct
40 Correct 440 ms 44200 KB Output is correct
41 Correct 1 ms 212 KB Output is correct
42 Correct 924 ms 64468 KB Output is correct
43 Correct 493 ms 39884 KB Output is correct
44 Correct 836 ms 60220 KB Output is correct
45 Correct 958 ms 66124 KB Output is correct
46 Correct 2352 ms 199012 KB Output is correct
47 Correct 2686 ms 259832 KB Output is correct
48 Correct 2399 ms 212788 KB Output is correct
49 Correct 2373 ms 212996 KB Output is correct
50 Correct 6246 ms 319452 KB Output is correct
51 Correct 3243 ms 187384 KB Output is correct
52 Correct 4964 ms 286840 KB Output is correct
53 Correct 5920 ms 312312 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 460 ms 47824 KB Output is correct
2 Correct 486 ms 49048 KB Output is correct
3 Correct 348 ms 40884 KB Output is correct
4 Correct 330 ms 33216 KB Output is correct
5 Correct 1 ms 320 KB Output is correct
6 Correct 452 ms 46884 KB Output is correct
7 Correct 92 ms 8136 KB Output is correct
8 Correct 242 ms 34980 KB Output is correct
9 Correct 359 ms 40936 KB Output is correct
10 Correct 432 ms 44760 KB Output is correct
11 Correct 323 ms 41788 KB Output is correct
12 Correct 1 ms 212 KB Output is correct
13 Correct 1 ms 212 KB Output is correct
14 Correct 1 ms 212 KB Output is correct
15 Correct 1 ms 316 KB Output is correct
16 Correct 1 ms 212 KB Output is correct
17 Correct 1 ms 212 KB Output is correct
18 Correct 1 ms 212 KB Output is correct
19 Correct 1 ms 320 KB Output is correct
20 Correct 1 ms 212 KB Output is correct
21 Correct 1 ms 212 KB Output is correct
22 Correct 1 ms 212 KB Output is correct
23 Correct 1 ms 324 KB Output is correct
24 Correct 1 ms 320 KB Output is correct
25 Correct 1 ms 212 KB Output is correct
26 Correct 1 ms 212 KB Output is correct
27 Correct 1 ms 324 KB Output is correct
28 Correct 4 ms 780 KB Output is correct
29 Correct 5 ms 972 KB Output is correct
30 Correct 6 ms 972 KB Output is correct
31 Correct 4 ms 724 KB Output is correct
32 Correct 6 ms 980 KB Output is correct
33 Correct 6 ms 976 KB Output is correct
34 Correct 7 ms 980 KB Output is correct
35 Correct 385 ms 41144 KB Output is correct
36 Correct 466 ms 53940 KB Output is correct
37 Correct 347 ms 41312 KB Output is correct
38 Correct 512 ms 53672 KB Output is correct
39 Correct 440 ms 44224 KB Output is correct
40 Correct 364 ms 41152 KB Output is correct
41 Correct 972 ms 64768 KB Output is correct
42 Correct 187 ms 20272 KB Output is correct
43 Correct 266 ms 34616 KB Output is correct
44 Correct 534 ms 40392 KB Output is correct
45 Correct 870 ms 60748 KB Output is correct
46 Correct 910 ms 64964 KB Output is correct
47 Correct 905 ms 63612 KB Output is correct
48 Correct 427 ms 41032 KB Output is correct
49 Correct 496 ms 53648 KB Output is correct
50 Correct 456 ms 44576 KB Output is correct
51 Correct 440 ms 44200 KB Output is correct
52 Correct 1 ms 212 KB Output is correct
53 Correct 924 ms 64468 KB Output is correct
54 Correct 493 ms 39884 KB Output is correct
55 Correct 836 ms 60220 KB Output is correct
56 Correct 958 ms 66124 KB Output is correct
57 Correct 386 ms 39924 KB Output is correct
58 Correct 541 ms 52344 KB Output is correct
59 Correct 472 ms 43052 KB Output is correct
60 Correct 456 ms 43076 KB Output is correct
61 Correct 1043 ms 65020 KB Output is correct
62 Correct 1 ms 212 KB Output is correct
63 Correct 976 ms 63520 KB Output is correct
64 Correct 523 ms 39196 KB Output is correct
65 Correct 813 ms 56760 KB Output is correct
66 Incorrect 913 ms 62928 KB Output isn't correct
67 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 460 ms 47824 KB Output is correct
2 Correct 486 ms 49048 KB Output is correct
3 Correct 348 ms 40884 KB Output is correct
4 Correct 330 ms 33216 KB Output is correct
5 Correct 1 ms 320 KB Output is correct
6 Correct 452 ms 46884 KB Output is correct
7 Correct 92 ms 8136 KB Output is correct
8 Correct 242 ms 34980 KB Output is correct
9 Correct 359 ms 40936 KB Output is correct
10 Correct 432 ms 44760 KB Output is correct
11 Correct 323 ms 41788 KB Output is correct
12 Correct 1 ms 212 KB Output is correct
13 Correct 1 ms 212 KB Output is correct
14 Correct 1 ms 212 KB Output is correct
15 Correct 1 ms 316 KB Output is correct
16 Correct 1 ms 212 KB Output is correct
17 Correct 1 ms 212 KB Output is correct
18 Correct 1 ms 212 KB Output is correct
19 Correct 1 ms 320 KB Output is correct
20 Correct 1 ms 212 KB Output is correct
21 Correct 1 ms 212 KB Output is correct
22 Correct 1 ms 212 KB Output is correct
23 Correct 1 ms 324 KB Output is correct
24 Correct 1 ms 320 KB Output is correct
25 Correct 1 ms 212 KB Output is correct
26 Correct 1 ms 212 KB Output is correct
27 Correct 1 ms 324 KB Output is correct
28 Correct 4 ms 780 KB Output is correct
29 Correct 5 ms 972 KB Output is correct
30 Correct 6 ms 972 KB Output is correct
31 Correct 4 ms 724 KB Output is correct
32 Correct 6 ms 980 KB Output is correct
33 Correct 6 ms 976 KB Output is correct
34 Correct 7 ms 980 KB Output is correct
35 Correct 385 ms 41144 KB Output is correct
36 Correct 466 ms 53940 KB Output is correct
37 Correct 347 ms 41312 KB Output is correct
38 Correct 512 ms 53672 KB Output is correct
39 Correct 440 ms 44224 KB Output is correct
40 Correct 364 ms 41152 KB Output is correct
41 Correct 972 ms 64768 KB Output is correct
42 Correct 187 ms 20272 KB Output is correct
43 Correct 266 ms 34616 KB Output is correct
44 Correct 534 ms 40392 KB Output is correct
45 Correct 870 ms 60748 KB Output is correct
46 Correct 910 ms 64964 KB Output is correct
47 Correct 905 ms 63612 KB Output is correct
48 Correct 427 ms 41032 KB Output is correct
49 Correct 496 ms 53648 KB Output is correct
50 Correct 456 ms 44576 KB Output is correct
51 Correct 440 ms 44200 KB Output is correct
52 Correct 1 ms 212 KB Output is correct
53 Correct 924 ms 64468 KB Output is correct
54 Correct 493 ms 39884 KB Output is correct
55 Correct 836 ms 60220 KB Output is correct
56 Correct 958 ms 66124 KB Output is correct
57 Correct 2352 ms 199012 KB Output is correct
58 Correct 2686 ms 259832 KB Output is correct
59 Correct 2399 ms 212788 KB Output is correct
60 Correct 2373 ms 212996 KB Output is correct
61 Correct 6246 ms 319452 KB Output is correct
62 Correct 3243 ms 187384 KB Output is correct
63 Correct 4964 ms 286840 KB Output is correct
64 Correct 5920 ms 312312 KB Output is correct
65 Correct 386 ms 39924 KB Output is correct
66 Correct 541 ms 52344 KB Output is correct
67 Correct 472 ms 43052 KB Output is correct
68 Correct 456 ms 43076 KB Output is correct
69 Correct 1043 ms 65020 KB Output is correct
70 Correct 1 ms 212 KB Output is correct
71 Correct 976 ms 63520 KB Output is correct
72 Correct 523 ms 39196 KB Output is correct
73 Correct 813 ms 56760 KB Output is correct
74 Incorrect 913 ms 62928 KB Output isn't correct
75 Halted 0 ms 0 KB -