Pagini recente » Cod sursa (job #1493794) | Cod sursa (job #1442296) | Cod sursa (job #36407) | Cod sursa (job #2539527) | Cod sursa (job #197886)
Cod sursa(job #197886)
# include <stdio.h>
# define FIN "gropi.in"
# define FOUT "gropi.out"
# define MAXN 100002
long long N,k,i,x,y,T;
long long C[MAXN];
long long L[MAXN];
long long poz[MAXN];
void swap(long long &a, long long &b)
{
long long aux;
aux = a;
a = b;
b = aux;
}
void down(long long i, long long N)
{
long long tata,fiu;
tata = i;
fiu = i << 1;
while (fiu <= N)
{
if (fiu < N && C[fiu]<C[fiu+1]) fiu++;
if (C[tata]<C[fiu])
{
swap(C[tata],C[fiu]);
swap(L[tata],L[fiu]);
tata = fiu;
fiu = fiu << 1;
}
else fiu = N+1;
}
}
void heap(long long N)
{
long long i;
for (i = N/2; i >= 1; --i)
down(i,N);
for (i = N; i > 1; --i)
{
swap(C[1],C[i]);
swap(L[1],L[i]);
down(1,i-1);
}
}
long long search(long long val)
{
long long st,dr,mij,rez;
st = 0;
dr = N+1;
while (st <= dr)
{
mij = (st + dr) >> 1;
if (C[mij] <= 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 (poz[xi] == poz[xf] && yi == yf) return 0;
if (poz[xi] == poz[xf] && yi != yf) return 1;
if (poz[xf] == poz[xf+1])
if (L[xf] == yf) rez = poz[xf]+1;
else rez=poz[xf];
if (poz[xf] != poz[xf+1])
if (L[xf] == yf) rez=poz[xf+1];
else rez=poz[xf];
if (poz[xi] == poz[xi+1])
if (L[xi] == yi) rez -= poz[xi]-1;
else rez -= poz[xi];
if (poz[xi] != poz[xi+1])
if (L[xi] == 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",&L[i],&C[i]);
heap(N);
long long ct = 0;
if (L[1] == 1) L[0] = 2;
else L[0] = 1;
if (L[N] == 1) L[N+1]= 2;
else L[N+1] = 1;
C[N+1]=k+1;
for (i = 1; i <= N+1; ++i)
if (L[i-1] != L[i]) poz[i] = ++ct;
else poz[i] = ct;
scanf("%lld",&T);
long long xi,yi,xf,yf,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)+yf-yi+1;
printf("%lld\n",rez);
}
return 0;
}