This submission is migrated from previous version of oj.uz, which used different machine for grading. This submission may have different result if resubmitted.
#include<bits/stdc++.h>
using namespace std;
#define maxn 100005
#define pii pair<int,int>
struct ed{
    int u,t,id,a;
    bool operator<(ed o){
        if(t!=o.t) return t<o.t;
        else return a<o.a;
    }
};
int n,m,d[3*maxn],Max[maxn];
vector<pii> dist[maxn];
vector<ed> e;
signed main(){
    ios_base::sync_with_stdio(false);
    cin.tie(NULL);cout.tie(NULL);
    cin >> n >> m;
    for(int i=1;i<=m;i++){
        int u,v,s,t;cin >> u >> v >> s >> t;
        e.push_back({u,s,i,1});
        e.push_back({v,t,i,0});
    }
    for(int i=1;i<=n;i++) Max[i]=-1;
    sort(e.begin(),e.end());
    for(ed x:e){
        if(x.a==1){
            if(x.u==1) d[x.id]=x.t;
            else d[x.id]=Max[x.u];
        }
        else{
            if(d[x.id]!=-1){
                dist[x.u].push_back({x.t,d[x.id]});
                Max[x.u]=max(Max[x.u],d[x.id]);
            }
        }
    }
    for(int i=1;i<(int)dist[n].size();i++) dist[n][i].second=max(dist[n][i].second,dist[n][i-1].second);
    int q;cin >> q;
    while(q--){
        int x;cin >> x;
        int p=upper_bound(dist[n].begin(),dist[n].end(),make_pair(x,INT_MAX))-dist[n].begin();
        if(p==0) cout << -1 << '\n';
        else cout << dist[n][p-1].second << '\n';
    }
}
| # | Verdict | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict | Execution time | Memory | Grader output | 
|---|
| Fetching results... |