Submission #1286850

#TimeUsernameProblemLanguageResultExecution timeMemory
1286850kerem버스 (JOI14_bus)C++20
100 / 100
140 ms29276 KiB
#include <bits/stdc++.h>
using namespace std;
#define int int64_t
#define pb push_back
#define emb emplace_back
#define fr first
#define sc second
#define all(x) x.begin(),x.end()
#define sp << " " <<
#define N 100000
#define inf (int)86400000
typedef pair<int,int> ii;
typedef tuple<int,int,int> iii;

int ind[N+5];
vector<ii> d[N+5];
vector<iii> g[N+5];

int bs(int i,int x){
	int l=0,r=d[i].size()-1;
	while(l<r){
		int mid=(l+r+1)/2;
		if(x>d[i][mid].fr)
			r=mid-1;
		else l=mid;
	}
	return max(x,d[i][l].sc);
}
void dfs(int x,int t){
	for(;ind[x]<(int)g[x].size();ind[x]++){
		int l,r,i;
		tie(l,r,i)=g[x][ind[x]];
		if(l<t) break;
		dfs(i,r);
		d[x].emb(l,min(d[x].back().sc,bs(i,r)));
	}
}
void solve(){
	int n,m;
	cin >> n >> m;
	for(int i=0;i<m;i++){
		int a,b,x,y;
		cin >> a >> b >> x >> y;
		g[a].emb(x,y,b);
	}
	for(int i=1;i<n;i++){
		d[i].emb(inf,inf);
		sort(all(g[i]),greater<iii>());
	}
	ind[n]=g[n].size();
	d[n].emb(inf,0);
	dfs(1,0);
	int q;cin>> q;
	while(q--){
		int x;
		cin >> x;
		int l=1,r=d[1].size();
		while(l<r){
			int mid=(l+r)/2;
			if(d[1][mid].sc>x)
				l=mid+1;
			else r=mid;
		}
		if(l==(int)d[1].size()) cout << -1 << "\n";
		else cout << d[1][l].fr << "\n"; 
	}
}
int32_t main(){
	//~ freopen("hopscotch.in","r",stdin);
	//~ freopen("hopscotch.out","w",stdout);
	
	cout << fixed << setprecision(0);
	ios_base::sync_with_stdio(false);
	cin.tie(NULL);cout.tie(NULL);
	
	int test=1;
	//~ cin >> test;
	while(test--) solve();
}


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