답안 #1014209

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
1014209 2024-07-04T14:12:37 Z pcc 새 집 (APIO18_new_home) C++17
57 / 100
5000 ms 517312 KB
#include <bits/stdc++.h>
using namespace std;
 
#pragma GCC optimize("Ofast,unroll-loops")
#pragma GCC target("avx2,popcnt")
 
#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*15];
	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(){
 ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);
	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 174 ms 430928 KB Output is correct
2 Correct 196 ms 430888 KB Output is correct
3 Correct 166 ms 430932 KB Output is correct
4 Correct 177 ms 430952 KB Output is correct
5 Correct 169 ms 430940 KB Output is correct
6 Correct 165 ms 430996 KB Output is correct
7 Correct 182 ms 430936 KB Output is correct
8 Correct 185 ms 430880 KB Output is correct
9 Correct 172 ms 431100 KB Output is correct
10 Correct 172 ms 430980 KB Output is correct
11 Correct 184 ms 430932 KB Output is correct
12 Correct 206 ms 430928 KB Output is correct
13 Correct 170 ms 430928 KB Output is correct
14 Correct 176 ms 430892 KB Output is correct
15 Correct 169 ms 430932 KB Output is correct
16 Correct 171 ms 430924 KB Output is correct
17 Correct 159 ms 431004 KB Output is correct
18 Correct 175 ms 430928 KB Output is correct
19 Correct 175 ms 431060 KB Output is correct
20 Correct 156 ms 430928 KB Output is correct
21 Correct 165 ms 430928 KB Output is correct
22 Correct 189 ms 430932 KB Output is correct
23 Correct 158 ms 430892 KB Output is correct
24 Correct 189 ms 430980 KB Output is correct
25 Correct 170 ms 430928 KB Output is correct
26 Correct 172 ms 430952 KB Output is correct
27 Correct 172 ms 430864 KB Output is correct
28 Correct 170 ms 430936 KB Output is correct
29 Correct 168 ms 431092 KB Output is correct
30 Correct 170 ms 430988 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 174 ms 430928 KB Output is correct
2 Correct 196 ms 430888 KB Output is correct
3 Correct 166 ms 430932 KB Output is correct
4 Correct 177 ms 430952 KB Output is correct
5 Correct 169 ms 430940 KB Output is correct
6 Correct 165 ms 430996 KB Output is correct
7 Correct 182 ms 430936 KB Output is correct
8 Correct 185 ms 430880 KB Output is correct
9 Correct 172 ms 431100 KB Output is correct
10 Correct 172 ms 430980 KB Output is correct
11 Correct 184 ms 430932 KB Output is correct
12 Correct 206 ms 430928 KB Output is correct
13 Correct 170 ms 430928 KB Output is correct
14 Correct 176 ms 430892 KB Output is correct
15 Correct 169 ms 430932 KB Output is correct
16 Correct 171 ms 430924 KB Output is correct
17 Correct 159 ms 431004 KB Output is correct
18 Correct 175 ms 430928 KB Output is correct
19 Correct 175 ms 431060 KB Output is correct
20 Correct 156 ms 430928 KB Output is correct
21 Correct 165 ms 430928 KB Output is correct
22 Correct 189 ms 430932 KB Output is correct
23 Correct 158 ms 430892 KB Output is correct
24 Correct 189 ms 430980 KB Output is correct
25 Correct 170 ms 430928 KB Output is correct
26 Correct 172 ms 430952 KB Output is correct
27 Correct 172 ms 430864 KB Output is correct
28 Correct 170 ms 430936 KB Output is correct
29 Correct 168 ms 431092 KB Output is correct
30 Correct 170 ms 430988 KB Output is correct
31 Correct 1165 ms 451180 KB Output is correct
32 Correct 290 ms 439800 KB Output is correct
33 Correct 1146 ms 452904 KB Output is correct
34 Correct 1169 ms 453192 KB Output is correct
35 Correct 1151 ms 450980 KB Output is correct
36 Correct 1188 ms 451052 KB Output is correct
37 Correct 1006 ms 453284 KB Output is correct
38 Correct 1032 ms 453112 KB Output is correct
39 Correct 828 ms 453336 KB Output is correct
40 Correct 869 ms 453196 KB Output is correct
41 Correct 903 ms 452824 KB Output is correct
42 Correct 964 ms 452708 KB Output is correct
43 Correct 292 ms 439696 KB Output is correct
44 Correct 966 ms 452896 KB Output is correct
45 Correct 972 ms 452804 KB Output is correct
46 Correct 1066 ms 452828 KB Output is correct
47 Correct 659 ms 451652 KB Output is correct
48 Correct 669 ms 451400 KB Output is correct
49 Correct 719 ms 451848 KB Output is correct
50 Correct 773 ms 452680 KB Output is correct
51 Correct 827 ms 451916 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 1797 ms 483948 KB Output is correct
2 Correct 1815 ms 477136 KB Output is correct
3 Correct 1528 ms 506324 KB Output is correct
4 Correct 1679 ms 487572 KB Output is correct
5 Correct 1651 ms 476444 KB Output is correct
6 Correct 1753 ms 476908 KB Output is correct
7 Correct 1096 ms 506384 KB Output is correct
8 Correct 1239 ms 487592 KB Output is correct
9 Correct 1418 ms 480988 KB Output is correct
10 Correct 1514 ms 477636 KB Output is correct
11 Correct 987 ms 476676 KB Output is correct
12 Correct 1182 ms 477504 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Execution timed out 5084 ms 517312 KB Time limit exceeded
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 174 ms 430928 KB Output is correct
2 Correct 196 ms 430888 KB Output is correct
3 Correct 166 ms 430932 KB Output is correct
4 Correct 177 ms 430952 KB Output is correct
5 Correct 169 ms 430940 KB Output is correct
6 Correct 165 ms 430996 KB Output is correct
7 Correct 182 ms 430936 KB Output is correct
8 Correct 185 ms 430880 KB Output is correct
9 Correct 172 ms 431100 KB Output is correct
10 Correct 172 ms 430980 KB Output is correct
11 Correct 184 ms 430932 KB Output is correct
12 Correct 206 ms 430928 KB Output is correct
13 Correct 170 ms 430928 KB Output is correct
14 Correct 176 ms 430892 KB Output is correct
15 Correct 169 ms 430932 KB Output is correct
16 Correct 171 ms 430924 KB Output is correct
17 Correct 159 ms 431004 KB Output is correct
18 Correct 175 ms 430928 KB Output is correct
19 Correct 175 ms 431060 KB Output is correct
20 Correct 156 ms 430928 KB Output is correct
21 Correct 165 ms 430928 KB Output is correct
22 Correct 189 ms 430932 KB Output is correct
23 Correct 158 ms 430892 KB Output is correct
24 Correct 189 ms 430980 KB Output is correct
25 Correct 170 ms 430928 KB Output is correct
26 Correct 172 ms 430952 KB Output is correct
27 Correct 172 ms 430864 KB Output is correct
28 Correct 170 ms 430936 KB Output is correct
29 Correct 168 ms 431092 KB Output is correct
30 Correct 170 ms 430988 KB Output is correct
31 Correct 1165 ms 451180 KB Output is correct
32 Correct 290 ms 439800 KB Output is correct
33 Correct 1146 ms 452904 KB Output is correct
34 Correct 1169 ms 453192 KB Output is correct
35 Correct 1151 ms 450980 KB Output is correct
36 Correct 1188 ms 451052 KB Output is correct
37 Correct 1006 ms 453284 KB Output is correct
38 Correct 1032 ms 453112 KB Output is correct
39 Correct 828 ms 453336 KB Output is correct
40 Correct 869 ms 453196 KB Output is correct
41 Correct 903 ms 452824 KB Output is correct
42 Correct 964 ms 452708 KB Output is correct
43 Correct 292 ms 439696 KB Output is correct
44 Correct 966 ms 452896 KB Output is correct
45 Correct 972 ms 452804 KB Output is correct
46 Correct 1066 ms 452828 KB Output is correct
47 Correct 659 ms 451652 KB Output is correct
48 Correct 669 ms 451400 KB Output is correct
49 Correct 719 ms 451848 KB Output is correct
50 Correct 773 ms 452680 KB Output is correct
51 Correct 827 ms 451916 KB Output is correct
52 Correct 748 ms 456484 KB Output is correct
53 Correct 833 ms 458312 KB Output is correct
54 Correct 921 ms 452704 KB Output is correct
55 Correct 847 ms 454288 KB Output is correct
56 Correct 836 ms 455240 KB Output is correct
57 Correct 886 ms 453192 KB Output is correct
58 Correct 862 ms 454364 KB Output is correct
59 Correct 810 ms 454980 KB Output is correct
60 Correct 975 ms 453708 KB Output is correct
61 Correct 213 ms 445260 KB Output is correct
62 Correct 702 ms 458056 KB Output is correct
63 Correct 848 ms 454216 KB Output is correct
64 Correct 759 ms 453712 KB Output is correct
65 Correct 859 ms 453288 KB Output is correct
66 Correct 969 ms 452908 KB Output is correct
67 Correct 299 ms 441760 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 174 ms 430928 KB Output is correct
2 Correct 196 ms 430888 KB Output is correct
3 Correct 166 ms 430932 KB Output is correct
4 Correct 177 ms 430952 KB Output is correct
5 Correct 169 ms 430940 KB Output is correct
6 Correct 165 ms 430996 KB Output is correct
7 Correct 182 ms 430936 KB Output is correct
8 Correct 185 ms 430880 KB Output is correct
9 Correct 172 ms 431100 KB Output is correct
10 Correct 172 ms 430980 KB Output is correct
11 Correct 184 ms 430932 KB Output is correct
12 Correct 206 ms 430928 KB Output is correct
13 Correct 170 ms 430928 KB Output is correct
14 Correct 176 ms 430892 KB Output is correct
15 Correct 169 ms 430932 KB Output is correct
16 Correct 171 ms 430924 KB Output is correct
17 Correct 159 ms 431004 KB Output is correct
18 Correct 175 ms 430928 KB Output is correct
19 Correct 175 ms 431060 KB Output is correct
20 Correct 156 ms 430928 KB Output is correct
21 Correct 165 ms 430928 KB Output is correct
22 Correct 189 ms 430932 KB Output is correct
23 Correct 158 ms 430892 KB Output is correct
24 Correct 189 ms 430980 KB Output is correct
25 Correct 170 ms 430928 KB Output is correct
26 Correct 172 ms 430952 KB Output is correct
27 Correct 172 ms 430864 KB Output is correct
28 Correct 170 ms 430936 KB Output is correct
29 Correct 168 ms 431092 KB Output is correct
30 Correct 170 ms 430988 KB Output is correct
31 Correct 1165 ms 451180 KB Output is correct
32 Correct 290 ms 439800 KB Output is correct
33 Correct 1146 ms 452904 KB Output is correct
34 Correct 1169 ms 453192 KB Output is correct
35 Correct 1151 ms 450980 KB Output is correct
36 Correct 1188 ms 451052 KB Output is correct
37 Correct 1006 ms 453284 KB Output is correct
38 Correct 1032 ms 453112 KB Output is correct
39 Correct 828 ms 453336 KB Output is correct
40 Correct 869 ms 453196 KB Output is correct
41 Correct 903 ms 452824 KB Output is correct
42 Correct 964 ms 452708 KB Output is correct
43 Correct 292 ms 439696 KB Output is correct
44 Correct 966 ms 452896 KB Output is correct
45 Correct 972 ms 452804 KB Output is correct
46 Correct 1066 ms 452828 KB Output is correct
47 Correct 659 ms 451652 KB Output is correct
48 Correct 669 ms 451400 KB Output is correct
49 Correct 719 ms 451848 KB Output is correct
50 Correct 773 ms 452680 KB Output is correct
51 Correct 827 ms 451916 KB Output is correct
52 Correct 1797 ms 483948 KB Output is correct
53 Correct 1815 ms 477136 KB Output is correct
54 Correct 1528 ms 506324 KB Output is correct
55 Correct 1679 ms 487572 KB Output is correct
56 Correct 1651 ms 476444 KB Output is correct
57 Correct 1753 ms 476908 KB Output is correct
58 Correct 1096 ms 506384 KB Output is correct
59 Correct 1239 ms 487592 KB Output is correct
60 Correct 1418 ms 480988 KB Output is correct
61 Correct 1514 ms 477636 KB Output is correct
62 Correct 987 ms 476676 KB Output is correct
63 Correct 1182 ms 477504 KB Output is correct
64 Execution timed out 5084 ms 517312 KB Time limit exceeded
65 Halted 0 ms 0 KB -