Pagini recente » Cod sursa (job #2256791) | Cod sursa (job #512664) | Cod sursa (job #611679) | Cod sursa (job #2160550) | Cod sursa (job #197826)
Cod sursa(job #197826)
#include<stdio.h>
#include<algorithm>
using namespace std;
#define N 100010
#define x first
#define y second
#define mp make_pair
pair<int, int> v[N];
int s[N],n,m,c;
int caut1(int X)
{
int st=0,dr=n-1,mij;
while(st!=dr)
{
mij=(st+dr)>>1;
if(v[mij].x<=X)
st=mij+1;
else
dr=mij;
}
return st;
}
int caut2(int X)
{
int st=0,dr=n-1,mij;
while(st!=dr)
{
mij=(st+dr+1)>>1;
if(v[mij].x<X)
st=mij;
else
dr=mij-1;
}
return st;
}
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=caut1(a.x);
if(b.x<=v[poz1].x)
printf("%d\n",b.x-a.x+1+(a.y!=b.y));
else
{
poz2=caut2(b.x);
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;
for(i=0; i<n; i++)
scanf("%d%d",&v[i].y,&v[i].x);
v[n++]=mp(0,0);
v[n++]=mp(c+1,0);
sort(v,v+n);
s[0]=v[0].y!=v[1].y;
for(i=1; i+1<n; 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;
}