Submission #55048

#TimeUsernameProblemLanguageResultExecution timeMemory
55048spencercomptonRailway Trip (JOI17_railway_trip)C++17
20 / 100
2076 ms12072 KiB
#include <bits/stdc++.h>
using namespace std;
int main(){
	ios_base::sync_with_stdio(false);
	cin.tie(0);
	int n, m, q;
	cin >> n >> m >> q;
	int ar[n];
	vector<pair<int, int> > li;
	for(int i = 0; i<n; i++){
		cin >> ar[i];
	}
	int left[n];
	left[0] = 0;
	li.push_back(make_pair(ar[0],0));
	for(int i=  1; i<n; i++){
		while(li[(int)li.size()-1].first<ar[i]){
			li.pop_back();
		}
		left[i] = li[(int)li.size()-1].second;
		li.push_back(make_pair(ar[i],i));
	}
	li.clear();
	int right[n];
	right[n-1] = n-1;
	li.push_back(make_pair(ar[n-1],n-1));
	for(int i = n-2; i>=0; i--){
		while(li[(int)li.size()-1].first<ar[i]){
			li.pop_back();
		}
		right[i] = li[(int)li.size()-1].second;
		li.push_back(make_pair(ar[i],i));
	}
	for(int i = 0; i<q; i++){
		int s, t;
		cin >> s >> t;
		s--;
		t--;
		int dist1[n];
		int dist2[n];
		int inf = n+2;
		for(int j = 0; j<n; j++){
			dist1[j] = inf;
			dist2[j] = inf;
		}
		vector<int> li1;
		dist1[s] = 0;
		li1.push_back(s);
		for(int j = 0; j<li1.size(); j++){
			int now = li1[j];
			if(dist1[left[now]]==inf){
				dist1[left[now]] = dist1[now]+1;
				li1.push_back(left[now]);
			}
			if(dist1[right[now]]==inf){
				dist1[right[now]] = dist1[now]+1;
				li1.push_back(right[now]);
			}
		}
		vector<int> li2;
		dist2[t] = 0;
		li2.push_back(t);
		for(int j = 0; j<li2.size(); j++){
			int now = li2[j];
			if(dist2[left[now]]==inf){
				dist2[left[now]] = dist2[now]+1;
				li2.push_back(left[now]);
			}
			if(dist2[right[now]]==inf){
				dist2[right[now]] = dist2[now]+1;
				li2.push_back(right[now]);
			}
		}
		int ans = inf;
		for(int i = 0; i<n; i++){
			ans = min(ans,dist1[i] + dist2[i] - 1);
		}
		cout << ans << endl;
	}
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...