답안 #953887

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
953887 2024-03-26T19:26:05 Z amirhoseinfar1385 Passport (JOI23_passport) C++17
54 / 100
543 ms 34244 KB
#include<bits/stdc++.h>
using namespace std;
const int maxn=200000+10;
int fl[maxn],fr[maxn],dpl[maxn],kaf=(1<<18),dpr[maxn],dp[maxn],inf=1e8,n;
pair<int,int>all[maxn];
vector<int>adj[maxn];

struct segment{
	pair<int,int>seg[(1<<19)];
	segment(){
		for(int i=0;i<(1<<19);i++){
			seg[i]=make_pair(-inf,-inf);
		}
	}
	void clear(){
		for(int i=0;i<(1<<19);i++){
			seg[i]=make_pair(-inf,-inf);
		}
	}
	void ins(int i,pair<int,int>w){
		i+=kaf;
		seg[i]=w;
		i>>=1;
		while(i>0){
			seg[i]=max(seg[(i<<1)],seg[(i<<1)^1]);
			i>>=1;
		}
	}
	pair<int,int> pors(int i,int l,int r,int tl,int tr){
		if(l>r||l>tr||r<tl||tl>tr){
			return make_pair(-inf,-inf);
		}
		if(l>=tl&&r<=tr){
			return seg[i];
		}
		int m=(l+r)>>1;
		return max(pors((i<<1),l,m,tl,tr),pors((i<<1)^1,m+1,r,tl,tr));
	}
}seg;

void vorod(){
	cin>>n;
	for(int i=1;i<=n;i++){
		cin>>all[i].first>>all[i].second;
	}
}

void calfr(int ind){
	fr[ind]=seg.pors(1,0,kaf-1,all[ind].first,all[ind].second).second;
	if(all[fr[ind]].second==all[ind].second){
		fr[ind]=-1;
	}else{
		adj[fr[ind]].push_back(ind);
	}
}

void calr(){
	seg.clear();
	for(int i=1;i<=n;i++){
		seg.ins(i,make_pair(all[i].second,i));
	}
	for(int i=1;i<=n;i++){
		dpr[i]=inf;
		calfr(i);
	}
	vector<pair<int,int>>v;
	for(int i=1;i<=n;i++){
		v.push_back(make_pair(all[i].second,i));
	}
	sort(v.rbegin(),v.rend());
	for(int i=0;i<n;i++){
		int u=v[i].second;
		if(v[i].first==n){
			dpr[u]=0;
			continue;
		}
		if(fr[u]==-1){
			continue;
		}
		dpr[u]=dpr[fr[u]]+1;
	}
}

void calfl(int ind){
	fl[ind]=-seg.pors(1,0,kaf-1,all[ind].first,all[ind].second).second;
	if(all[fl[ind]].first==all[ind].first){
		fl[ind]=-1;
	}else{
		adj[fl[ind]].push_back(ind);
	}
}

void call(){
	seg.clear();
	for(int i=1;i<=n;i++){
		seg.ins(i,make_pair(-all[i].first,-i));
	}
	for(int i=1;i<=n;i++){
		calfl(i);
		dpl[i]=inf;
	}
	vector<pair<int,int>>v;
	for(int i=1;i<=n;i++){
		v.push_back(make_pair(all[i].first,i));
	}
	sort(v.begin(),v.end());
	for(int i=0;i<n;i++){
		int u=v[i].second;
		if(v[i].first==1){
			dpl[u]=0;
			continue;
		}
		if(fl[u]==-1){
			continue;
		}
		dpl[u]=dpl[fl[u]]+1;
	}
}

void calres(){
	set<pair<int,int>>st;
	vector<int>vis(n+2);
	for(int i=1;i<=n;i++){
		dp[i]=dpr[i]+dpl[i]+1;
		st.insert(make_pair(dp[i],i));
	}
	while((int)st.size()>0){
		auto x=*st.begin();
		st.erase(x);
		if(vis[x.second]==1){
			continue;
		}
		vis[x.second]=1;
		dp[x.second]=x.first;
		for(auto y:adj[x.second]){
			st.insert(make_pair(x.first+1,y));
		}
	}	
	vector<pair<int,int>>v;
	for(int i=1;i<=n;i++){
		v.push_back(make_pair(all[i].second-all[i].first+1,i));
	}
	sort(v.rbegin(),v.rend());
	seg.clear();
	for(int i=0;i<n;i++){
		int u=v[i].second;
		seg.ins(u,make_pair(-dp[u]+1,u));
		dp[u]=-seg.pors(1,0,kaf-1,all[u].first,all[u].second).first+1;
		seg.ins(u,make_pair(-dp[u],i));
//		for(int j=all[u].first;j<=all[u].second;j++){
//			dp[u]=min(dp[u],dp[j]+(j!=u));
//		}
	}
}

void pre(){
	call();
	calr();
	calres();
}

void khor(){
	int q;
	cin>>q;
	for(int i=1;i<=q;i++){
		int x;
		cin>>x;
		if(dp[x]>=inf){
			cout<<-1<<"\n";
		}else{
			cout<<dp[x]<<"\n";
		}
	}
}

int main(){
	ios::sync_with_stdio(0);
	cin.tie(0);
	cout.tie(0);
//	freopen("inp.txt","r",stdin);
	vorod();
	pre();
	khor();
}
# 결과 실행 시간 메모리 Grader output
1 Correct 3 ms 12888 KB Output is correct
2 Correct 7 ms 12892 KB Output is correct
3 Correct 4 ms 12892 KB Output is correct
4 Correct 448 ms 28184 KB Output is correct
5 Correct 344 ms 31192 KB Output is correct
6 Correct 317 ms 33672 KB Output is correct
7 Correct 302 ms 26184 KB Output is correct
8 Correct 245 ms 23712 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 5 ms 12892 KB Output is correct
2 Correct 3 ms 12892 KB Output is correct
3 Correct 4 ms 12892 KB Output is correct
4 Correct 4 ms 12892 KB Output is correct
5 Correct 4 ms 12928 KB Output is correct
6 Correct 3 ms 12888 KB Output is correct
7 Correct 4 ms 12888 KB Output is correct
8 Correct 5 ms 13144 KB Output is correct
9 Correct 3 ms 12892 KB Output is correct
10 Correct 4 ms 12892 KB Output is correct
11 Correct 4 ms 12892 KB Output is correct
12 Correct 4 ms 12892 KB Output is correct
13 Correct 4 ms 12892 KB Output is correct
14 Correct 4 ms 12892 KB Output is correct
15 Correct 4 ms 12892 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 5 ms 12892 KB Output is correct
2 Correct 3 ms 12892 KB Output is correct
3 Correct 4 ms 12892 KB Output is correct
4 Correct 4 ms 12892 KB Output is correct
5 Correct 4 ms 12928 KB Output is correct
6 Correct 3 ms 12888 KB Output is correct
7 Correct 4 ms 12888 KB Output is correct
8 Correct 5 ms 13144 KB Output is correct
9 Correct 3 ms 12892 KB Output is correct
10 Correct 4 ms 12892 KB Output is correct
11 Correct 4 ms 12892 KB Output is correct
12 Correct 4 ms 12892 KB Output is correct
13 Correct 4 ms 12892 KB Output is correct
14 Correct 4 ms 12892 KB Output is correct
15 Correct 4 ms 12892 KB Output is correct
16 Correct 8 ms 13148 KB Output is correct
17 Correct 7 ms 13044 KB Output is correct
18 Correct 8 ms 12892 KB Output is correct
19 Correct 8 ms 12900 KB Output is correct
20 Correct 7 ms 13148 KB Output is correct
21 Correct 7 ms 13148 KB Output is correct
22 Correct 7 ms 12892 KB Output is correct
23 Correct 7 ms 13144 KB Output is correct
24 Correct 7 ms 12892 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 5 ms 12892 KB Output is correct
2 Correct 3 ms 12892 KB Output is correct
3 Correct 4 ms 12892 KB Output is correct
4 Correct 4 ms 12892 KB Output is correct
5 Correct 4 ms 12928 KB Output is correct
6 Correct 3 ms 12888 KB Output is correct
7 Correct 4 ms 12888 KB Output is correct
8 Correct 5 ms 13144 KB Output is correct
9 Correct 3 ms 12892 KB Output is correct
10 Correct 4 ms 12892 KB Output is correct
11 Correct 4 ms 12892 KB Output is correct
12 Correct 4 ms 12892 KB Output is correct
13 Correct 4 ms 12892 KB Output is correct
14 Correct 4 ms 12892 KB Output is correct
15 Correct 4 ms 12892 KB Output is correct
16 Correct 8 ms 13148 KB Output is correct
17 Correct 7 ms 13044 KB Output is correct
18 Correct 8 ms 12892 KB Output is correct
19 Correct 8 ms 12900 KB Output is correct
20 Correct 7 ms 13148 KB Output is correct
21 Correct 7 ms 13148 KB Output is correct
22 Correct 7 ms 12892 KB Output is correct
23 Correct 7 ms 13144 KB Output is correct
24 Correct 7 ms 12892 KB Output is correct
25 Correct 3 ms 12892 KB Output is correct
26 Correct 4 ms 12892 KB Output is correct
27 Correct 8 ms 13148 KB Output is correct
28 Correct 8 ms 12940 KB Output is correct
29 Correct 8 ms 13148 KB Output is correct
30 Correct 7 ms 13148 KB Output is correct
31 Correct 7 ms 12932 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 3 ms 12888 KB Output is correct
2 Correct 7 ms 12892 KB Output is correct
3 Correct 4 ms 12892 KB Output is correct
4 Correct 448 ms 28184 KB Output is correct
5 Correct 344 ms 31192 KB Output is correct
6 Correct 317 ms 33672 KB Output is correct
7 Correct 302 ms 26184 KB Output is correct
8 Correct 245 ms 23712 KB Output is correct
9 Correct 5 ms 12892 KB Output is correct
10 Correct 3 ms 12892 KB Output is correct
11 Correct 4 ms 12892 KB Output is correct
12 Correct 4 ms 12892 KB Output is correct
13 Correct 4 ms 12928 KB Output is correct
14 Correct 3 ms 12888 KB Output is correct
15 Correct 4 ms 12888 KB Output is correct
16 Correct 5 ms 13144 KB Output is correct
17 Correct 3 ms 12892 KB Output is correct
18 Correct 4 ms 12892 KB Output is correct
19 Correct 4 ms 12892 KB Output is correct
20 Correct 4 ms 12892 KB Output is correct
21 Correct 4 ms 12892 KB Output is correct
22 Correct 4 ms 12892 KB Output is correct
23 Correct 4 ms 12892 KB Output is correct
24 Correct 8 ms 13148 KB Output is correct
25 Correct 7 ms 13044 KB Output is correct
26 Correct 8 ms 12892 KB Output is correct
27 Correct 8 ms 12900 KB Output is correct
28 Correct 7 ms 13148 KB Output is correct
29 Correct 7 ms 13148 KB Output is correct
30 Correct 7 ms 12892 KB Output is correct
31 Correct 7 ms 13144 KB Output is correct
32 Correct 7 ms 12892 KB Output is correct
33 Correct 3 ms 12892 KB Output is correct
34 Correct 4 ms 12892 KB Output is correct
35 Correct 8 ms 13148 KB Output is correct
36 Correct 8 ms 12940 KB Output is correct
37 Correct 8 ms 13148 KB Output is correct
38 Correct 7 ms 13148 KB Output is correct
39 Correct 7 ms 12932 KB Output is correct
40 Incorrect 543 ms 34244 KB Output isn't correct
41 Halted 0 ms 0 KB -