답안 #1014199

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
1014199 2024-07-04T13:57:34 Z pcc 새 집 (APIO18_new_home) C++17
47 / 100
5000 ms 870608 KB
#include <bits/stdc++.h>
using namespace std;

#pragma GCC optimize("O3,unroll-loops")
#pragma GCC target("avx2,popcnt,sse4")

#define _all(T) T.begin(),T.end()
#define pii pair<int,int>
#define fs first
#define sc second
const int mxn = 1e6;
const int inf = 1e9;
const int lim = 1e8+10;

struct SEG{
#define mid ((l+r)>>1)
#define ls now*2+1
#define rs now*2+2
	int seg[mxn*4];
	pii op[mxn*10];
	int head[mxn];
	int cnt = 0;
	SEG(){
		fill(seg,seg+mxn*4,-inf);
	}
	void modify(int now,int l,int r,int s,int e,int v,bool rec = false){
		if(rec&&now == 0){
			cnt++;
			head[cnt] = head[cnt-1];
		}
		if(l>=s&&e>=r){
			if(rec){
				op[++head[cnt]] = pii(now,seg[now]);
			}
			seg[now] = max(seg[now],v);
			return;
		}
		if(mid>=s)modify(ls,l,mid,s,e,v,rec);
		if(mid<e)modify(rs,mid+1,r,s,e,v,rec);
		return;
	}
	void undo(){
		assert(cnt);
		while(head[cnt]>head[cnt-1]){
			auto &[p,v] = op[head[cnt]--];
			seg[p] = v;
		}
		cnt--;
		return;
	}
	int getval(int now,int l,int r,int p){
		if(l == r)return seg[now];
		if(mid>=p)return max(seg[now],getval(ls,l,mid,p));
		else return max(seg[now],getval(rs,mid+1,r,p));
	}
#undef mid
#undef ls
#undef rs
};

SEG seg1,seg2;
int N,K,Q;
multiset<int> st[mxn];
vector<int> all;
vector<int> allt;
vector<pii> req;
array<int,4> shop[mxn];
int ans[mxn];
vector<pii> tseg[mxn*4];
vector<pii> ask[mxn];

void addev(int now,int l,int r,int s,int e,pii val){
	assert(e>=s);
	if(l>=s&&e>=r){
		tseg[now].push_back(val);
		return;
	}
	int mid = (l+r)>>1;
	if(mid>=s)addev(now*2+1,l,mid,s,e,val);
	if(mid<e)addev(now*2+2,mid+1,r,s,e,val);
	return;
}

void del(int pos,int tp){
	st[tp].erase(st[tp].find(pos));
	auto lit = --st[tp].lower_bound(pos);
	auto rit = st[tp].lower_bound(pos);
	int mid = all[*lit]+(all[*rit]-all[*lit])/2;
	int mp = upper_bound(_all(all),mid)-all.begin();
	//cerr<<"DEL: "<<pos<<' '<<tp<<"::"<<*lit<<' '<<mp<<' '<<*rit<<endl;
	seg1.modify(0,0,all.size(),*lit,mp-1,-all[*lit],1);
	seg2.modify(0,0,all.size(),mp,*rit,all[*rit],1);
	//cerr<<"DEL DONE! "<<endl;
	return;
}

void undo(){
	seg1.undo();
	seg2.undo();
}

void dfs(int now,int l,int r){
	//cerr<<"DFS IN: "<<l<<' '<<r<<endl;
	for(auto &i:tseg[now])del(i.fs,i.sc);
	if(l == r){
		for(auto &i:ask[l]){//p,idx
			//cerr<<"ASK: "<<i.fs<<','<<i.sc<<' '<<all[i.fs]<<' '<<seg1.getval(0,0,all.size(),i.fs)<<' '<<seg2.getval(0,0,all.size(),i.fs)<<endl;
			ans[i.sc] = max(all[i.fs]+seg1.getval(0,0,all.size(),i.fs),seg2.getval(0,0,all.size(),i.fs)-all[i.fs]);
		}
	}
	else{
		int mid = (l+r)>>1;
		dfs(now*2+1,l,mid);
		dfs(now*2+2,mid+1,r);
	}
	for(auto &[pos,tp]:tseg[now]){
		undo();
		//cerr<<"UNDO: "<<pos<<','<<tp<<endl;
		st[tp].insert(pos);
	}
	//cerr<<"DFS OUT: "<<l<<' '<<r<<endl;
	return;
}

int main(){

	cin>>N>>K>>Q;
	allt.push_back(-1);
	for(int i = 1;i<=N;i++){
		cin>>shop[i][0]>>shop[i][1]>>shop[i][2]>>shop[i][3];//x,t,a,b
		all.push_back(shop[i][0]);
		allt.push_back(shop[i][2]);
		allt.push_back(shop[i][3]);
	}
	for(int i = 0;i<Q;i++){
		int l,y;
		cin>>l>>y;
		all.push_back(l);
		allt.push_back(y);
		req.push_back(pii(l,y));
	}
	all.push_back(-inf);all.push_back(inf);
	sort(_all(all));all.resize(unique(_all(all))-all.begin());
	sort(_all(allt));allt.resize(unique(_all(allt))-allt.begin());
	//cerr<<"ALL: ";for(auto &i:all)cerr<<i<<' ';cerr<<endl;
	//cerr<<"ALLT: ";for(auto &i:allt)cerr<<i<<' ';cerr<<endl;
	for(int i = 1;i<=K;i++){
		st[i].insert(0);
		st[i].insert(all.size()-1);
	}
	for(int i = 1;i<=N;i++){
		shop[i][0] = lower_bound(_all(all),shop[i][0])-all.begin();
		st[shop[i][1]].insert(shop[i][0]);
		shop[i][2] = lower_bound(_all(allt),shop[i][2])-allt.begin();
		shop[i][3] = lower_bound(_all(allt),shop[i][3])-allt.begin();
	}
	for(int i = 1;i<=K;i++){
		for(auto it = ++st[i].begin();it != st[i].end();it++){
			int l = *prev(it),r = *it;
			int mid = all[l]+(all[r]-all[l])/2;
			auto pos = upper_bound(_all(all),mid)-all.begin();
			seg1.modify(0,0,all.size(),l,pos-1,-all[l]);
			seg2.modify(0,0,all.size(),pos,r,all[r]);
		}
	}
	//cerr<<"INIT DONE!"<<endl;
	for(int i = 1;i<=N;i++){
		int pos = shop[i][0],tp = shop[i][1],s = shop[i][2],e = shop[i][3];
		//cerr<<"ADDEV: "<<0<<' '<<s-1<<' '<<pos<<' '<<tp<<endl;
		//cerr<<"ADDEV: "<<e+1<<' '<<allt.size()<<' '<<pos<<' '<<tp<<endl;
		addev(0,0,allt.size(),0,s-1,pii(pos,tp));
		addev(0,0,allt.size(),e+1,allt.size(),pii(pos,tp));
	}
	for(int i = 0;i<Q;i++){
		auto &[p,t] = req[i];
		p = lower_bound(_all(all),p)-all.begin();
		t = lower_bound(_all(allt),t)-allt.begin();
		//cerr<<"ASK POS: "<<p<<' '<<t<<endl;
		ask[t].push_back(pii(p,i));
	}

	//cerr<<"ADDEV DONE!"<<' '<<seg1.getval(0,0,all.size(),req[0].fs)<<' '<<seg2.getval(0,0,all.size(),req[0].fs)<<endl;

	dfs(0,0,allt.size());
	assert(!seg1.cnt);
	assert(!seg2.cnt);
	//cerr<<"DFS DONE! "<<endl;
	for(int i = 0;i<Q;i++)cout<<(ans[i]>lim?-1:ans[i])<<'\n';
	return 0;
}
# 결과 실행 시간 메모리 Grader output
1 Correct 134 ms 352592 KB Output is correct
2 Correct 126 ms 352596 KB Output is correct
3 Correct 137 ms 352596 KB Output is correct
4 Correct 142 ms 352628 KB Output is correct
5 Correct 134 ms 352596 KB Output is correct
6 Correct 132 ms 352832 KB Output is correct
7 Correct 137 ms 352720 KB Output is correct
8 Correct 137 ms 352848 KB Output is correct
9 Correct 135 ms 352848 KB Output is correct
10 Correct 137 ms 352724 KB Output is correct
11 Correct 143 ms 352928 KB Output is correct
12 Correct 130 ms 352656 KB Output is correct
13 Correct 165 ms 352848 KB Output is correct
14 Correct 137 ms 352848 KB Output is correct
15 Correct 153 ms 352740 KB Output is correct
16 Correct 128 ms 352848 KB Output is correct
17 Correct 141 ms 352844 KB Output is correct
18 Correct 141 ms 352852 KB Output is correct
19 Correct 142 ms 352840 KB Output is correct
20 Correct 136 ms 352848 KB Output is correct
21 Correct 138 ms 352648 KB Output is correct
22 Correct 147 ms 352772 KB Output is correct
23 Correct 137 ms 352736 KB Output is correct
24 Correct 137 ms 352744 KB Output is correct
25 Correct 134 ms 352848 KB Output is correct
26 Correct 148 ms 352848 KB Output is correct
27 Correct 133 ms 352596 KB Output is correct
28 Correct 135 ms 352840 KB Output is correct
29 Correct 136 ms 352784 KB Output is correct
30 Correct 139 ms 352776 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 134 ms 352592 KB Output is correct
2 Correct 126 ms 352596 KB Output is correct
3 Correct 137 ms 352596 KB Output is correct
4 Correct 142 ms 352628 KB Output is correct
5 Correct 134 ms 352596 KB Output is correct
6 Correct 132 ms 352832 KB Output is correct
7 Correct 137 ms 352720 KB Output is correct
8 Correct 137 ms 352848 KB Output is correct
9 Correct 135 ms 352848 KB Output is correct
10 Correct 137 ms 352724 KB Output is correct
11 Correct 143 ms 352928 KB Output is correct
12 Correct 130 ms 352656 KB Output is correct
13 Correct 165 ms 352848 KB Output is correct
14 Correct 137 ms 352848 KB Output is correct
15 Correct 153 ms 352740 KB Output is correct
16 Correct 128 ms 352848 KB Output is correct
17 Correct 141 ms 352844 KB Output is correct
18 Correct 141 ms 352852 KB Output is correct
19 Correct 142 ms 352840 KB Output is correct
20 Correct 136 ms 352848 KB Output is correct
21 Correct 138 ms 352648 KB Output is correct
22 Correct 147 ms 352772 KB Output is correct
23 Correct 137 ms 352736 KB Output is correct
24 Correct 137 ms 352744 KB Output is correct
25 Correct 134 ms 352848 KB Output is correct
26 Correct 148 ms 352848 KB Output is correct
27 Correct 133 ms 352596 KB Output is correct
28 Correct 135 ms 352840 KB Output is correct
29 Correct 136 ms 352784 KB Output is correct
30 Correct 139 ms 352776 KB Output is correct
31 Correct 1097 ms 374736 KB Output is correct
32 Correct 275 ms 362076 KB Output is correct
33 Correct 1130 ms 376412 KB Output is correct
34 Correct 1089 ms 376664 KB Output is correct
35 Correct 1103 ms 374728 KB Output is correct
36 Correct 1171 ms 374508 KB Output is correct
37 Correct 993 ms 376772 KB Output is correct
38 Correct 985 ms 376768 KB Output is correct
39 Correct 980 ms 376792 KB Output is correct
40 Correct 855 ms 376612 KB Output is correct
41 Correct 939 ms 376520 KB Output is correct
42 Correct 931 ms 376264 KB Output is correct
43 Correct 222 ms 362952 KB Output is correct
44 Correct 935 ms 376520 KB Output is correct
45 Correct 972 ms 376260 KB Output is correct
46 Correct 1085 ms 375968 KB Output is correct
47 Correct 713 ms 375488 KB Output is correct
48 Correct 683 ms 375240 KB Output is correct
49 Correct 767 ms 375756 KB Output is correct
50 Correct 891 ms 376384 KB Output is correct
51 Correct 840 ms 375548 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 2094 ms 413008 KB Output is correct
2 Correct 2185 ms 405528 KB Output is correct
3 Runtime error 1723 ms 870608 KB Execution killed with signal 11
4 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 4903 ms 449380 KB Output is correct
2 Correct 851 ms 399892 KB Output is correct
3 Execution timed out 5058 ms 449816 KB Time limit exceeded
4 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 134 ms 352592 KB Output is correct
2 Correct 126 ms 352596 KB Output is correct
3 Correct 137 ms 352596 KB Output is correct
4 Correct 142 ms 352628 KB Output is correct
5 Correct 134 ms 352596 KB Output is correct
6 Correct 132 ms 352832 KB Output is correct
7 Correct 137 ms 352720 KB Output is correct
8 Correct 137 ms 352848 KB Output is correct
9 Correct 135 ms 352848 KB Output is correct
10 Correct 137 ms 352724 KB Output is correct
11 Correct 143 ms 352928 KB Output is correct
12 Correct 130 ms 352656 KB Output is correct
13 Correct 165 ms 352848 KB Output is correct
14 Correct 137 ms 352848 KB Output is correct
15 Correct 153 ms 352740 KB Output is correct
16 Correct 128 ms 352848 KB Output is correct
17 Correct 141 ms 352844 KB Output is correct
18 Correct 141 ms 352852 KB Output is correct
19 Correct 142 ms 352840 KB Output is correct
20 Correct 136 ms 352848 KB Output is correct
21 Correct 138 ms 352648 KB Output is correct
22 Correct 147 ms 352772 KB Output is correct
23 Correct 137 ms 352736 KB Output is correct
24 Correct 137 ms 352744 KB Output is correct
25 Correct 134 ms 352848 KB Output is correct
26 Correct 148 ms 352848 KB Output is correct
27 Correct 133 ms 352596 KB Output is correct
28 Correct 135 ms 352840 KB Output is correct
29 Correct 136 ms 352784 KB Output is correct
30 Correct 139 ms 352776 KB Output is correct
31 Correct 1097 ms 374736 KB Output is correct
32 Correct 275 ms 362076 KB Output is correct
33 Correct 1130 ms 376412 KB Output is correct
34 Correct 1089 ms 376664 KB Output is correct
35 Correct 1103 ms 374728 KB Output is correct
36 Correct 1171 ms 374508 KB Output is correct
37 Correct 993 ms 376772 KB Output is correct
38 Correct 985 ms 376768 KB Output is correct
39 Correct 980 ms 376792 KB Output is correct
40 Correct 855 ms 376612 KB Output is correct
41 Correct 939 ms 376520 KB Output is correct
42 Correct 931 ms 376264 KB Output is correct
43 Correct 222 ms 362952 KB Output is correct
44 Correct 935 ms 376520 KB Output is correct
45 Correct 972 ms 376260 KB Output is correct
46 Correct 1085 ms 375968 KB Output is correct
47 Correct 713 ms 375488 KB Output is correct
48 Correct 683 ms 375240 KB Output is correct
49 Correct 767 ms 375756 KB Output is correct
50 Correct 891 ms 376384 KB Output is correct
51 Correct 840 ms 375548 KB Output is correct
52 Correct 727 ms 380868 KB Output is correct
53 Correct 748 ms 382812 KB Output is correct
54 Correct 984 ms 377288 KB Output is correct
55 Correct 854 ms 378312 KB Output is correct
56 Correct 829 ms 378824 KB Output is correct
57 Correct 915 ms 376876 KB Output is correct
58 Correct 974 ms 377752 KB Output is correct
59 Correct 894 ms 378560 KB Output is correct
60 Correct 1030 ms 377080 KB Output is correct
61 Correct 247 ms 368476 KB Output is correct
62 Correct 866 ms 381444 KB Output is correct
63 Correct 950 ms 377576 KB Output is correct
64 Correct 941 ms 377216 KB Output is correct
65 Correct 1029 ms 376776 KB Output is correct
66 Correct 1160 ms 376316 KB Output is correct
67 Correct 300 ms 364232 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 134 ms 352592 KB Output is correct
2 Correct 126 ms 352596 KB Output is correct
3 Correct 137 ms 352596 KB Output is correct
4 Correct 142 ms 352628 KB Output is correct
5 Correct 134 ms 352596 KB Output is correct
6 Correct 132 ms 352832 KB Output is correct
7 Correct 137 ms 352720 KB Output is correct
8 Correct 137 ms 352848 KB Output is correct
9 Correct 135 ms 352848 KB Output is correct
10 Correct 137 ms 352724 KB Output is correct
11 Correct 143 ms 352928 KB Output is correct
12 Correct 130 ms 352656 KB Output is correct
13 Correct 165 ms 352848 KB Output is correct
14 Correct 137 ms 352848 KB Output is correct
15 Correct 153 ms 352740 KB Output is correct
16 Correct 128 ms 352848 KB Output is correct
17 Correct 141 ms 352844 KB Output is correct
18 Correct 141 ms 352852 KB Output is correct
19 Correct 142 ms 352840 KB Output is correct
20 Correct 136 ms 352848 KB Output is correct
21 Correct 138 ms 352648 KB Output is correct
22 Correct 147 ms 352772 KB Output is correct
23 Correct 137 ms 352736 KB Output is correct
24 Correct 137 ms 352744 KB Output is correct
25 Correct 134 ms 352848 KB Output is correct
26 Correct 148 ms 352848 KB Output is correct
27 Correct 133 ms 352596 KB Output is correct
28 Correct 135 ms 352840 KB Output is correct
29 Correct 136 ms 352784 KB Output is correct
30 Correct 139 ms 352776 KB Output is correct
31 Correct 1097 ms 374736 KB Output is correct
32 Correct 275 ms 362076 KB Output is correct
33 Correct 1130 ms 376412 KB Output is correct
34 Correct 1089 ms 376664 KB Output is correct
35 Correct 1103 ms 374728 KB Output is correct
36 Correct 1171 ms 374508 KB Output is correct
37 Correct 993 ms 376772 KB Output is correct
38 Correct 985 ms 376768 KB Output is correct
39 Correct 980 ms 376792 KB Output is correct
40 Correct 855 ms 376612 KB Output is correct
41 Correct 939 ms 376520 KB Output is correct
42 Correct 931 ms 376264 KB Output is correct
43 Correct 222 ms 362952 KB Output is correct
44 Correct 935 ms 376520 KB Output is correct
45 Correct 972 ms 376260 KB Output is correct
46 Correct 1085 ms 375968 KB Output is correct
47 Correct 713 ms 375488 KB Output is correct
48 Correct 683 ms 375240 KB Output is correct
49 Correct 767 ms 375756 KB Output is correct
50 Correct 891 ms 376384 KB Output is correct
51 Correct 840 ms 375548 KB Output is correct
52 Correct 2094 ms 413008 KB Output is correct
53 Correct 2185 ms 405528 KB Output is correct
54 Runtime error 1723 ms 870608 KB Execution killed with signal 11
55 Halted 0 ms 0 KB -