Pagini recente » Cod sursa (job #2199896) | Cod sursa (job #1729927) | Cod sursa (job #2066217) | Cod sursa (job #56087) | Cod sursa (job #1475028)
#include<fstream>
#include<algorithm>
using namespace std;
ifstream f("gropi.in"); ofstream g("gropi.out");
int i,n,m,c,p1,p2,s[100010];
struct pc{int x,y;} a,b,v[100010];
bool cmp(pc a,pc b)
{ if(a.x==b.x) return a.y<b.y;
return a.x<b.x;
}
int bs(int x)
{ int mij,li=1,ls=n;
while(li<ls)
{ mij=(li+ls)>>1;
if(v[mij].x<x) li=mij+1; else ls=mij;
}
return li;
}
int bs2(int x)
{ int mij,li=1,ls=n;
while(li<ls)
{ mij=(li+ls+1)>>1;
if(v[mij].x<x) li=mij; else ls=mij-1;
}
return li;
}
int main()
{ f>>c>>n;
for(i=1;i<=n;++i) f>>v[i].y>>v[i].x;
++n;
v[n].x=0; v[n].y=0;
++n;
v[n].x=c+1; v[n].y=0;
sort(v+1,v+n+1,cmp);
s[1]=(v[1].y!=v[2].y);
for(i=2;i<n;++i) s[i]=s[i-1]+(v[i].y!=v[i+1].y);
f>>m;
while(m--)
{ f>>a.y>>a.x>>b.y>>b.x;
if(a.x>b.x||(a.x==b.x&&a.y>b.y)) swap(a,b);
p1=bs(a.x);
if(v[p1].x>=b.x) g<<b.x-a.x+1+(a.y!=b.y)<<'\n';
else
{ p2=bs2(b.x);
g<<s[p2-1]-s[p1-1]+b.x-a.x+(a.y==v[p1].y)+(b.y==v[p2].y)+1<<'\n';
}
}
g.close(); return 0;
}