Submission #1307115

#TimeUsernameProblemLanguageResultExecution timeMemory
1307115vtnooRailway Trip 2 (JOI22_ho_t4)C++20
0 / 100
427 ms20056 KiB
#include <bits/stdc++.h>
#define pb push_back
#define fst first
#define snd second
#define fore(i,a,b) for(int i=a,pao=b;i<pao;++i)
#define SZ(x) ((int)x.size())
#define ALL(x) x.begin(),x.end()
#define me(a,v) memset((a),(v),sizeof(a))
#define FIN ios::sync_with_stdio(0);cin.tie(0);cout.tie(0)
using namespace std;
typedef long long ll;
const int MAXM=2e5+5,MAXN=1e5+5,INF=1e9;
int A[MAXM],B[MAXM],L[MAXN],R[MAXN],sig[MAXN];
void chmin(int &a,int b){
	if(a>b)a=b;
}
void chmax(int &a,int b){
	if(a<b)a=b;
}
int main(){FIN;
	int n,k;cin>>n>>k;
	int m;cin>>m;
	fill(L,L+n,INF);
	fill(R,R+n,-INF);
	vector<vector<int>>add(n),rem(n);
	vector<vector<int>>add2(n),rem2(n);
	fore(i,0,m){
		cin>>A[i]>>B[i];
		A[i]--;B[i]--;
		if(A[i]<B[i]){
			add[A[i]].pb(B[i]);
			rem[min(A[i]+k,B[i]+1)].pb(B[i]);
		}else{
			add2[A[i]].pb(B[i]);
			rem2[max(A[i]-k,B[i]-1)].pb(B[i]);
		}
	}
	multiset<int>s;
	fore(i,0,n){
		if(!s.empty())for(auto x:rem[i])s.erase(s.find(x));
		for(auto x:add[i])s.insert(x);
		if(!s.empty())chmax(R[i],*s.rbegin());
	}
	s.clear();
	for(int i=n-1;i>=0;i--){
		if(!s.empty())for(auto x:rem2[i])s.erase(s.find(x));
		for(auto x:add2[i])s.insert(x);
		if(!s.empty())chmin(L[i],*s.begin());
	}
	me(sig,-1);
	int Q;cin>>Q;
	while(Q--){
		 int s,t;cin>>s>>t;s--;t--;
		 queue<pair<int,int>>q;q.push({s,s});
		 int steps=0;
		 while(!q.empty()){
			auto prev=q.front();q.pop();
			if(prev.fst<=t&&t<=prev.snd){
				cout<<steps<<endl;
				break;
			}
			steps++;
			pair<int,int>next=prev;
			for(int i=prev.fst;i<=prev.snd;i++){
				if(sig[i]!=-1)i=sig[i];
				chmin(next.fst,L[i]);
				chmax(next.snd,R[i]);
			}
			sig[prev.fst]=prev.snd+1;
			if(next==prev){
				cout<<-1<<endl;
				break;
			}
			q.push(next);
		 }
	}
}
#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...