Pagini recente » Cod sursa (job #681587) | Cod sursa (job #1226249) | Cod sursa (job #1418764) | Cod sursa (job #436451) | Cod sursa (job #1953005)
#include<fstream>
#include<algorithm>
#define DIM 100005
using namespace std;
ifstream fin("gropi.in");
ofstream fout("gropi.out");
int n, m, X1, Y1, X2, Y2, k, sol, f[DIM];
struct str{
int x;
int y;
} v[DIM];
struct zone{
int left;
int right;
} a[DIM];
inline int cmp( const str &a, const str &b ){
return a.y < b.y;
}
inline int det_zone( int x ){
int st = 1;
int dr = k;
while( st <= dr ){
int mid = ( st + dr ) / 2;
if( a[mid].left <= x && x <= a[mid].right ){
return mid;
}
if( a[mid].right < x )
st = mid + 1;
else{
dr = mid - 1;
}
}
return dr;
}
int main(){
fin >> n >> m;
for( int i = 1; i <= m; i++ ){
fin >> v[i].x >> v[i].y;
}
sort( v + 1 , v + m + 1, cmp );
k = 0;
for( int i = 1; i <= m; i++ ){
if( f[k] != v[i].x ){
k++;
f[k] = v[i].x;
a[k].left = v[i].y;
a[k].right = v[i].y;
}else{
a[k].right = v[i].y;
}
}
a[1].left = 1;
a[k].right = n;
fin >> m;
for( int t = 1; t <= m; t++ ){
fin >> X1 >> Y1 >> X2 >> Y2;
if( Y1 > Y2 ){
swap( Y1, Y2 );
swap( X1, X2 );
}
int z1 = det_zone( Y1 );
int z2 = det_zone( Y2 );
sol = Y2 - Y1 + 1;
sol += z2 - z1;
if( Y1 == Y2 ){
fout << sol + 1 << "\n";
continue;
}
if( X1 == f[z1] )
sol++;
if( X2 == f[z2] )
sol++;
fout << sol << "\n";
}
return 0;
}