제출 #527591

#제출 시각아이디문제언어결과실행 시간메모리
527591CSQ31Railway Trip 2 (JOI22_ho_t4)C++17
27 / 100
2082 ms17488 KiB
#include <bits/stdc++.h>
using namespace std;
#define pb push_back
#define owo ios_base::sync_with_stdio(0);cin.tie(0);
const int MAXN = 1e5+2;
int l[17][MAXN],r[17][MAXN];
vector<int>e[MAXN],f[MAXN];
int main()
{
	owo
	int n,k,m,q;
	cin>>n>>k>>m;
	for(int i=0;i<m;i++){
		int s,t;
		cin>>s>>t;
		if(s < t){
			e[s].pb(t);
			e[min(s+k,t+1)].pb(-t);
		}else{
			f[s].pb(t);
			f[max(s-k,t-1)].pb(-t);
		}
	}
	multiset<int,greater<int>>ss;
	for(int i=1;i<=n;i++){
		for(int x:e[i]){
			if(x>0)ss.insert(x);
			else ss.erase(ss.find(-x));
		}
		if(ss.empty())r[0][i] = i;
		else r[0][i] = *ss.begin();
	}
	ss.clear();
	for(int i=n;i>=1;i--){
		for(int x:f[i]){
			if(x>0)ss.insert(-x);
			else ss.erase(ss.find(x));
		}
		if(ss.empty())l[0][i] = i;
		else l[0][i] = -(*ss.begin());
	}
	cin>>q;
	while(q--){
		int s,t;
		cin>>s>>t;
		int L=s,R=s;
		int ans = 0;
		while(t<L || t>R){
			int mnl = L;
			int mxr = R;
			for(int i=L;i<=R;i++){
				mnl = min(mnl,l[0][i]);
				mxr = max(mxr,r[0][i]);
			}
			if(mnl == L && mxr == R){
				ans = -1;
				break;
			}
			L = mnl;
			R = mxr;
			ans++;
		}
		cout<<ans<<'\n';
	}

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