Pagini recente » Cod sursa (job #2452297) | Cod sursa (job #2685175) | Cod sursa (job #236990) | Cod sursa (job #2285529) | Cod sursa (job #589007)
Cod sursa(job #589007)
#include<stdio.h>
#include<algorithm>
#define maxG 100005
#define same (x1 == x2 && y1 == y2)
using namespace std;
FILE*f=fopen("gropi.in","r");
FILE*g=fopen("gropi.out","w");
int n,m,i,V[maxG],z,rez,minim,T[maxG],Rez;
int Q,x1,y1,x2,y2,z1,z2;
struct groapa{
int x;
int y;
}G[maxG];
struct cmp{
inline bool operator () ( const groapa &a , const groapa &b ){
return a.y < b.y;
}
};
inline int cb ( int y ){
int p = 1, u = z; int m;
while ( p <= u ){
m = ( p + u ) >> 1;
if ( V[m] == y ) return m;
if ( V[m] < y )
p = m + 1;
else
u = m - 1;
}
return u;
}
int main () {
fscanf(f,"%d %d",&n,&m);
for ( i = 1 ; i <= m ; ++i ){
fscanf(f,"%d %d",&G[i].x,&G[i].y);
if ( G[i].y < G[minim].y || !minim )
minim = i;
}
++m; G[m].x = G[minim].x; G[m].y = 0;
sort( G+1,G+m+1,cmp() );
for ( i = 1 ; i <= m ; ++i ){
if ( G[i].x != G[i-1].x )
V[++z] = G[i].y,T[z] = G[i].x;
}
fscanf(f,"%d",&Q);
for ( i = 1 ; i <= Q ; ++i ){
fscanf(f,"%d %d %d %d",&x1,&y1,&x2,&y2);
if ( y1 > y2 ){
int aux;
aux = x1; x1 = x2; x2 = aux;
aux = y1; y1 = y2; y2 = aux;
}
z1 = cb(y1); z2 = cb(y2);
Rez = z2 - z1 + y2 - y1 + 1;
if ( x1 == T[z1] && !same ) ++Rez;
if ( x2 == T[z2] && !same ) ++Rez;
fprintf(g,"%d\n",Rez);
}
fclose(f);
fclose(g);
return 0;
}