Submission #953843

# Submission time Handle Problem Language Result Execution time Memory
953843 2024-03-26T17:58:31 Z amirhoseinfar1385 Passport (JOI23_passport) C++17
48 / 100
2000 ms 11008 KB
#include<bits/stdc++.h>
using namespace std;
const int maxn=200000+10;
int fl[maxn],fr[maxn],dpl[maxn],dpr[maxn],dp[maxn],inf=1e8,n;
pair<int,int>all[maxn];
vector<int>adj[maxn];

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

void calfr(int ind){
	int mx=all[ind].second;
	fr[ind]=-1;
	for(int i=all[ind].first;i<=all[ind].second;i++){
		if(all[i].second>mx){
			mx=all[i].second;
			fr[ind]=i;
		}
	}
	if(fr[ind]>0){
		adj[fr[ind]].push_back(ind);
	}
}

void calr(){
	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){
	int mn=all[ind].first;
	fl[ind]=-1;
	for(int i=all[ind].first;i<=all[ind].second;i++){
		if(all[i].first<mn){
			mn=all[i].first;
			fl[ind]=i;
		}
	}
	if(fl[ind]>0){
		adj[fl[ind]].push_back(ind);
	}
}

void call(){
	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());
	for(int i=0;i<n;i++){
		int u=v[i].second;
		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();
}
# Verdict Execution time Memory Grader output
1 Correct 2 ms 8796 KB Output is correct
2 Correct 2 ms 8796 KB Output is correct
3 Correct 2 ms 8796 KB Output is correct
4 Execution timed out 2056 ms 11008 KB Time limit exceeded
5 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 2 ms 8796 KB Output is correct
2 Correct 4 ms 8796 KB Output is correct
3 Correct 2 ms 8796 KB Output is correct
4 Correct 2 ms 8792 KB Output is correct
5 Correct 2 ms 8796 KB Output is correct
6 Correct 2 ms 8792 KB Output is correct
7 Correct 2 ms 8796 KB Output is correct
8 Correct 2 ms 8796 KB Output is correct
9 Correct 3 ms 8804 KB Output is correct
10 Correct 2 ms 8796 KB Output is correct
11 Correct 2 ms 8796 KB Output is correct
12 Correct 2 ms 8796 KB Output is correct
13 Correct 3 ms 8796 KB Output is correct
14 Correct 2 ms 8792 KB Output is correct
15 Correct 2 ms 8796 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 2 ms 8796 KB Output is correct
2 Correct 4 ms 8796 KB Output is correct
3 Correct 2 ms 8796 KB Output is correct
4 Correct 2 ms 8792 KB Output is correct
5 Correct 2 ms 8796 KB Output is correct
6 Correct 2 ms 8792 KB Output is correct
7 Correct 2 ms 8796 KB Output is correct
8 Correct 2 ms 8796 KB Output is correct
9 Correct 3 ms 8804 KB Output is correct
10 Correct 2 ms 8796 KB Output is correct
11 Correct 2 ms 8796 KB Output is correct
12 Correct 2 ms 8796 KB Output is correct
13 Correct 3 ms 8796 KB Output is correct
14 Correct 2 ms 8792 KB Output is correct
15 Correct 2 ms 8796 KB Output is correct
16 Correct 7 ms 9080 KB Output is correct
17 Correct 4 ms 9056 KB Output is correct
18 Correct 15 ms 9076 KB Output is correct
19 Correct 12 ms 9228 KB Output is correct
20 Correct 4 ms 8856 KB Output is correct
21 Correct 4 ms 9052 KB Output is correct
22 Correct 11 ms 8844 KB Output is correct
23 Correct 9 ms 8888 KB Output is correct
24 Correct 10 ms 8796 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 2 ms 8796 KB Output is correct
2 Correct 4 ms 8796 KB Output is correct
3 Correct 2 ms 8796 KB Output is correct
4 Correct 2 ms 8792 KB Output is correct
5 Correct 2 ms 8796 KB Output is correct
6 Correct 2 ms 8792 KB Output is correct
7 Correct 2 ms 8796 KB Output is correct
8 Correct 2 ms 8796 KB Output is correct
9 Correct 3 ms 8804 KB Output is correct
10 Correct 2 ms 8796 KB Output is correct
11 Correct 2 ms 8796 KB Output is correct
12 Correct 2 ms 8796 KB Output is correct
13 Correct 3 ms 8796 KB Output is correct
14 Correct 2 ms 8792 KB Output is correct
15 Correct 2 ms 8796 KB Output is correct
16 Correct 7 ms 9080 KB Output is correct
17 Correct 4 ms 9056 KB Output is correct
18 Correct 15 ms 9076 KB Output is correct
19 Correct 12 ms 9228 KB Output is correct
20 Correct 4 ms 8856 KB Output is correct
21 Correct 4 ms 9052 KB Output is correct
22 Correct 11 ms 8844 KB Output is correct
23 Correct 9 ms 8888 KB Output is correct
24 Correct 10 ms 8796 KB Output is correct
25 Correct 2 ms 8800 KB Output is correct
26 Correct 2 ms 8796 KB Output is correct
27 Correct 8 ms 9052 KB Output is correct
28 Correct 4 ms 9052 KB Output is correct
29 Correct 3 ms 9052 KB Output is correct
30 Correct 5 ms 9052 KB Output is correct
31 Correct 7 ms 9052 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 2 ms 8796 KB Output is correct
2 Correct 2 ms 8796 KB Output is correct
3 Correct 2 ms 8796 KB Output is correct
4 Execution timed out 2056 ms 11008 KB Time limit exceeded
5 Halted 0 ms 0 KB -