Pagini recente » Cod sursa (job #288271) | Cod sursa (job #596333) | Cod sursa (job #2797700) | Cod sursa (job #2233500) | Cod sursa (job #1519215)
#include <fstream>
#include <algorithm>
using namespace std;
#define maxd 100010
ifstream fin("gropi.in");
ofstream fout("gropi.out");
struct gr{
int x,y;
};
gr v[maxd];
bool test(gr a, gr b){
if(a.y<b.y) return 1;
return 0;
}
int c, n, m, s1, s2, c1, c2, dist;
int d[maxd];
int cautare(int bb){
if(bb<v[1].y) return 0;
if(bb>=v[n].y) return n;
int st=1, dr=n;
int mj=0;
while(st+1<dr){
mj=(st+dr)/2;
if(bb<v[mj].y) dr=mj;
else st=mj;
}
return st;
}
int main(){
fin>>c>>n;
for(int i=1;i<=n;++i) fin>>v[i].x>>v[i].y;
sort(v+1, v+n+1, test);
for(int i=2;i<=n;++i){
d[i]=d[i-1];
if(v[i].x!=v[i-1].x) d[i]++;
}
fin>>m;
for(;m;--m){
fin>>s1>>c1>>s2>>c2;
if(c1==c2) fout<<abs(s1-s2)+1<<'\n';
else{
if(c1>c2) swap(c1, c2), swap(s1,s2);
int p1=cautare(c1);
int p2=cautare(c2);
dist=c2-c1+1;
if(p1==p2){
dist+=abs(s1-s2);
}
else{
if(s1==v[p1+1].x) dist++;
if(s2==v[p2].x) dist++;
dist+=d[p2]-d[p1+1];
}
fout<<dist<<'\n';
}
}
return 0;
}