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>
#define f0r(i,n) for(int i = 0;i<n;i++)
#define pb push_back
#define ll long long int
using namespace std;
const int mxn = 500005;
int main(){
ll r,c,n;
cin>>r>>c>>n;
vector<pair<ll,ll>>green;
map<ll, set<ll>>m;
f0r(i,n){
ll x,y;
cin>>x>>y;
m[x].insert(y);
green.pb({x,y});
}
map<pair<ll,ll>, pair<ll,ll>>nxt;
for(pair<ll,ll> p : green){
auto ptr = lower_bound(m[p.first + 1].begin(), m[p.first + 1].end(), p.second);
if(ptr != m[p.first + 1].end())nxt[p] = {p.first + 1, *ptr};
else nxt[p] = {p.first + 1, p.second};
}
int t;
cin>>t;
while(t--){
bool ans = 1;
ll sx, sy, ex, ey;
cin>>sx>>sy>>ex>>ey;
if(sx == ex)cout<<"Yes"<<'\n';
else if(sx > ex || sy > ey)cout<<"No"<<'\n';
else if(m.count(sx) == 0 || m.count(ex) == 0)cout<<"No"<<'\n';
else{
auto ptr1 = lower_bound(m[sx].begin(), m[sx].end(), sy);
//auto ptr2 = upper_bound(m[ex].begin(), m[ex].end(), ey);
if(ptr1 == m[sx].end()){
ans = 0;
}
/*
if(ptr2 == m[sy].begin()){
cout<<"No"<<'\n';
break;
}
ptr2--;
*/
if(ans){
sy = *ptr1;
//ey = *ptr2;
pair<ll,ll> loc = {sx, sy};
while(loc.first <ex){
//cout<<loc.first<<' '<<loc.second<<'\n';
if(nxt.count(loc) == 0){
ans = 0;
break;
}
else{
if(loc.first == ex - 1)loc = {loc.first + 1, loc.second};
else loc = nxt[loc];
}
}
if(!ans)cout<<"No"<<'\n';
else if(loc.second <= ey)cout<<"Yes"<<'\n';
else cout<<"No"<<'\n';
}
else{
cout<<"No"<<'\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... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |