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 <cstdio>
#include <algorithm>
#include <vector>
#include <queue>
using namespace std;
struct bus{
int a,b,x,y;
};
bool operator<(bus b1,bus b2)
{
return b1.x<b2.x;
}
int main()
{
int n,m,t=0;
scanf("%d%d",&n,&m);
static bus B[300000];
for(int i=0;i<m;i++){
scanf("%d%d%d%d",&(B[i].a),&(B[i].b),&(B[i].x),&(B[i].y));
B[i].a--;
B[i].b--;
}
sort(B,B+m);
static int E[100000],F[300000];
for(int i=0;i<n;i++){
E[i]=-1;
}
priority_queue<pair<int,int> > PQ;
vector<pair<int,int> > K;
for(int i=0;i<m;i++){
while(!PQ.empty()&&-PQ.top().first<=B[i].x){
pair<int,int> pr=PQ.top();
E[B[pr.second].b]=max(E[B[pr.second].b],F[pr.second]);
PQ.pop();
}
int p;
if(B[i].a==0){
p=B[i].x;
}
else{
p=E[B[i].a];
}
F[i]=p;
PQ.push(make_pair(-(B[i].y+t),i));
if(B[i].b==n-1){
K.push_back(make_pair(B[i].y,p));
}
}
sort(K.begin(),K.end());
vector<int> T1,T2;
int S=-1;
for(int i=0;i<K.size();i++){
if(S<K[i].second){
T1.push_back(K[i].first);
T2.push_back(K[i].second);
S=K[i].second;
}
}
int Q;
scanf("%d",&Q);
while(Q--){
int l;
scanf("%d",&l);
int i=upper_bound(T1.begin(),T1.end(),l)-T1.begin();
printf("%d\n",i==0?-1:T2[i-1]);
}
return 0;
}
# | 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... |