Submission #289459

#TimeUsernameProblemLanguageResultExecution timeMemory
289459nandonathanielRailway Trip (JOI17_railway_trip)C++14
20 / 100
2084 ms8600 KiB
#include<bits/stdc++.h>
using namespace std;
typedef pair<int,int> pii;
const int MAXN=100005,INF=1e9;
int a[MAXN],L[MAXN],R[MAXN];
vector<int> adj[MAXN];
bool visited[MAXN];

int main(){
	ios_base::sync_with_stdio(false);cin.tie(NULL);cout.tie(NULL);
	int n,k,q,u,v;
	cin >> n >> k >> q;
	for(int i=1;i<=n;i++)cin >> a[i];
	stack<int> kiri;
	kiri.push(1);
	for(int i=2;i<=n;i++){
		while(a[kiri.top()]<a[i])kiri.pop();
		adj[i].push_back(kiri.top());
		adj[kiri.top()].push_back(i);
		kiri.push(i);
	}
	stack<int> kanan;
	kanan.push(n);
	for(int i=n-1;i>=1;i--){
		while(a[kanan.top()]<a[i])kanan.pop();
		adj[i].push_back(kanan.top());
		adj[kanan.top()].push_back(i);
		kanan.push(i);
	}
	while(q--){
		for(int i=1;i<=n;i++)visited[i]=0;
		cin >> u >> v;
		queue<pii> Q;
		Q.push({0,u});
		visited[u]=true;
		while(!Q.empty()){
			pii now=Q.front();
			Q.pop();
			if(now.second==v){
				cout << now.first-1 << '\n';
				break;
			}
			for(auto nxt : adj[now.second]){
				if(!visited[nxt]){
					visited[nxt]=true;
					Q.push({now.first+1,nxt});
				}
			}
		}
	}
	return 0;
}

#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...