Pagini recente » Cod sursa (job #1097772) | Cod sursa (job #1538262) | Cod sursa (job #1883873) | Cod sursa (job #1056639) | Cod sursa (job #197612)
Cod sursa(job #197612)
#include <set>
#include <map>
#include <string>
#include <vector>
#include <cmath>
#include <iostream>
#include <algorithm>
using namespace std;
#define mp make_pair
#define pb push_back
#define sz(c) (int)((c).size())
#define f first
#define s second
#define all(c) c.begin(),c.end()
#define pw(c) (1 << c)
#define fin "gropi.in"
#define fout "gropi.out"
const int Nmax = 100100;
int N,C,M;
vector < pair<int,int> > v;
int sum[Nmax];
int ret;
inline int bsearch(int upperLimit)
{
int lo,hi,m;
lo = 0; hi = N - 1;
while ( lo < hi )
{
m = ( lo + hi ) / 2;
if ( v[ m ].f < upperLimit )
lo = m + 1;
else
hi = m - 1;
}
return lo - 1;
}
void readdata_solve()
{
int x,y,i;
int xa,ya,xb,yb;
int p1,p2;
freopen(fin,"r",stdin);
freopen(fout,"w",stdout);
scanf("%d%d",&C,&N);
for ( i = 1; i <= N; ++i )
{
scanf("%d%d",&x,&y);
v.pb(mp(y,x));
}
sort(v.begin(),v.end());
sum[0] = 0;
for ( i = 1; i < sz(v); ++i )
if ( v[i].s != v[i-1].s )
sum[i] = sum[i-1] + 1;
else
sum[i] = sum[i-1];
scanf("%d",&M);
for ( i = 1; i <= M; ++i )
{
scanf("%d%d%d%d",&xa,&ya,&xb,&yb);
if ( ya > yb )
swap(xa,xb), swap(ya,yb);
ret = yb - ya + 1;
p1 = bsearch(ya);
p2 = bsearch(yb);
//printf("%d %d ",p1,p2);
if ( p1 != p2 )
{
ret += sum[ p2 ] - sum[ p1 + 1 ];
if ( v[ p1 + 1 ].s == xa )
++ret;
if ( v[ p2 ].s == xb )
++ret;
}
else
if ( xa != xb )
++ret;
printf("%d\n",ret);
}
}
int main()
{
readdata_solve();
return 0;
}