Pagini recente » Cod sursa (job #1059652) | Cod sursa (job #3259914) | Cod sursa (job #2636564) | Cod sursa (job #2641683) | Cod sursa (job #197820)
Cod sursa(job #197820)
#include<stdio.h>
#include<algorithm>
using namespace std;
#define N 100010
#define x first
#define y second
pair<int, int> v[N];
int s[N],n,m,c;
int caut(int x)
{
int p=0,u=n,mij;
while(p<u)
{
mij=(p+u)>>1;
if(x<=v[mij].x)
u=mij;
else
p=mij+1;
}
if(p>n+1)
p=n+1;
return p;
}
void rezolva()
{
pair<int, int> a,b;
int poz1,poz2;
scanf("%d%d%d%d",&a.y,&a.x,&b.y,&b.x);
if(a>b)
swap(a,b);
poz1=caut(a.x);
if((v[poz1].x<a.x)&&(poz1<=n))
poz1++;
if(b.x<=v[poz1].x)
printf("%d\n",b.x-a.x+1+(a.y!=b.y));
else
{
poz2=caut(b.x);
if((v[poz2].x<b.x)&&(poz2))
poz2--;
int pasi=s[poz2-1]-s[poz1-1];
if(a.y==v[poz1].y)
pasi++;
if(b.y==v[poz2].y)
pasi++;
pasi+=b.x-a.x+1;
printf("%d\n",pasi);
}
}
void citire()
{
scanf("%d%d",&c,&n);
int i,n1;
n1=n+1;
for(i=1; i<=n; i++)
scanf("%d%d",&v[i].y,&v[i].x);
v[0].x=v[0].y=0;
v[n+1].y=0;
v[n+1].x=c+1;
sort(v,v+n+2);
s[0]=v[0].y!=v[1].y;
for(i=1; i<n1; i++)
s[i]=s[i-1]+(v[i].y!=v[i+1].y);
scanf("%d",&m);
for(i=0; i<m; i++)
rezolva();
}
int main()
{
freopen("gropi.in","r",stdin);
freopen("gropi.out","w",stdout);
citire();
return 0;
}