Pagini recente » Cod sursa (job #1809392) | Cod sursa (job #2335051) | Cod sursa (job #172735) | Cod sursa (job #2299697) | Cod sursa (job #197688)
Cod sursa(job #197688)
#include<stdio.h>
long n,m,g[100002][3],i,j,c,is,xa,xb,ya,yb,dist[100002],g1,g2,sol,aux;
void sort();
void heapdown(long ii, long nn);
void swap(long a, long b);
int main()
{ freopen("gropi.in","r",stdin); freopen("gropi.out","w",stdout);
scanf("%ld%ld",&c,&n);
for(i=1;i<=n;i++) scanf("%ld%ld",&g[i][1],&g[i][2]);
sort();
dist[1]=0;
for(i=2;i<=n;i++)
dist[i]=(g[i][1]==g[i-1][1])?dist[i-1]+g[i][2]-g[i-1][2]:dist[i-1]+g[i][2]-g[i-1][2]+1;
scanf("%ld",&m);
for(i=1;i<=m;i++)
{ scanf("%ld%ld%ld%ld",&xa,&ya,&xb,&yb);
if(ya>yb){ aux=ya; ya=yb; yb=aux;
aux=xa; xa=xb; xb=aux;
}
if(yb<g[1][2]){ printf("%ld",(xa==xb)?yb-ya+1:yb-ya+2); continue;}
j=1;
while(g[j][2]<ya) j++; g1=j;
if(yb>g[n][2]) g2=n;
else {while(g[j][2]) j++; g2=j-1;}
sol=dist[g2]-dist[g1]+1;
sol+=(g[g1][1]==xa)?g[g1][2]-ya+1:g[g1][2]-ya;
sol+=(g[g2][1]==xb)?yb-g[g2][2]+1:yb-g[g2][2];
printf("%ld\n",sol);
}
return 0;
}
void sort()
{ for(i=n/2;i>=1;i--) heapdown(i,n);
for(i=n;i>=1;i--) { swap(1,i);
heapdown(1,i-1);
}
}
void heapdown(long ii, long nn)
{ if(2*ii>nn) return;
is=2*ii;
if(2*ii<nn) if(g[2*ii][2]<g[2*ii+1][2]) is=2*ii+1;
if(g[ii][2]<g[is][2]){ swap(ii,is); heapdown(is,nn);}
return;
}
void swap(long a, long b)
{
aux=g[a][1]; g[a][1]=g[b][1]; g[b][1]=aux;
aux=g[a][2]; g[a][2]=g[b][2]; g[b][2]=aux;
}