Pagini recente » Cod sursa (job #978019) | Cod sursa (job #2092550) | Cod sursa (job #219159) | Cod sursa (job #726924) | Cod sursa (job #198109)
Cod sursa(job #198109)
# include <stdio.h>
# include <algorithm>
using namespace std;
# define FIN "gropi.in"
# define FOUT "gropi.out"
# define MAXN 100010
struct two
{
long long c,l;
};
long long N,k,i,x,y,T;
two H[MAXN];
long long poz[MAXN];
long long cmp(two a,two b)
{
return a.c<b.c;
}
void swap(int &a,int &b)
{
int aux;
aux = a;
a = b;
b = aux;
}
long long search(long long val)
{
long long st,dr,mij,rez = 0;
st = 0;
dr = N+1;
while (st <= dr)
{
mij = (st + dr) >> 1;
if (H[mij].c <= val)
{
rez = mij;
st = mij + 1;
}
else dr = mij - 1;
}
return rez;
}
long long verif(long long xi,long long yi,long long xf,long long yf)
{
long long rez;
if (xi == xf && yi == yf) return 0;
if (xi == xf && yi != yf) return 1;
if (H[xf].l == H[xf+1].l)
if (H[xf].l == yf) rez = poz[xf]+1;
else rez=poz[xf];
if (H[xf].l != H[xf+1].l)
if (H[xf].l == yf) rez=poz[xf+1];
else rez=poz[xf];
if (H[xi].l == H[xi+1].l)
if (H[xi].l == yi) rez -= (poz[xi]-1);
else rez -= poz[xi];
if (H[xi].l != H[xi+1].l)
if (H[xi].l == yi) rez -= poz[xi+1];
else rez -= poz[xi];
return rez;
}
int main()
{
freopen(FIN,"r",stdin);
freopen(FOUT,"w",stdout);
scanf("%lld%lld",&k,&N);
for (i = 1; i <= N; ++i)
scanf("%lld%lld",&H[i].l,&H[i].c);
sort(H+1,H+N+1,cmp);
long long ct = 0;
if (H[1].l == 1) H[0].l = 2;
else H[0].l = 1;
if (H[N].l == 1) H[N+1].l= 2;
else H[N+1].l = 1;
H[N+1].c=k+1;
for (i = 1; i <= N+1; ++i)
if (H[i-1].l != H[i].l) poz[i] = ++ct;
else poz[i] = ct;
scanf("%lld",&T);
long long xi,yi,xf,yf;
long long rez;
for (i = 1; i <= T; ++i)
{
scanf("%lld%lld",&xi,&yi);
scanf("%lld%lld",&xf,&yf);
if (yf < yi)
{
swap(xi,xf);
swap(yi,yf);
}
x = search(yi);
y = search(yf);
rez = verif(x,xi,y,xf);
rez+=yf-yi+1;
printf("%lld\n",rez);
}
return 0;
}