Pagini recente » Cod sursa (job #610117) | Cod sursa (job #1031398) | Cod sursa (job #2800071) | Cod sursa (job #1974496) | Cod sursa (job #206434)
Cod sursa(job #206434)
#include <cstdio>
#include <algorithm>
using namespace std;
#define x first
#define y second
#define mp make_pair
int n, c, m;
pair<int, int> v[100005];
int s[100005];
int caut1(int X)
{
int st = 0, dr = n - 1, mij;
while (st != dr) {
mij = (st + dr) / 2;
if (v[mij].x <= X) st = mij + 1;
else dr = mij;
}
return st;
}
int caut2(int X)
{
int st = 0, dr = n - 1, mij;
while (st != dr) {
mij = (st + dr + 1) / 2;
if (v[mij].x < X) st = mij;
else dr = mij - 1;
}
return st;
}
int main()
{
freopen("gropi.in", "r", stdin);
freopen("gropi.out", "w", stdout);
int i, p1, p2, rez;
scanf("%d %d", &c, &n);
for (i = 0; i < n; ++i) scanf("%d %d", &v[i].y, &v[i].x);
v[n++] = mp(0, 0);
v[n++] = mp(c + 1, 0);
sort(v, v + n);
s[0] = v[0].y != v[1].y;
for (i = 1; i + 1 < n; ++i) s[i] = s[i-1] + (v[i].y != v[i+1].y);
scanf("%d", &m);
while (m--)
{
pair<int, int> a, b;
scanf("%d %d %d %d", &a.y, &a.x, &b.y, &b.x);
if (b < a) swap(a, b);
p1 = caut1(a.x);
if (v[p1].x >= b.x) printf("%d\n", b.x-a.x + 1 + (a.y != b.y));
else
{
p2 = caut2(b.x);
rez = s[p2 - 1] - s[p1 - 1];
if (a.y == v[p1].y) ++rez;
if (b.y == v[p2].y) ++rez;
rez += b.x - a.x + 1;
printf("%d\n", rez);
}
}
return 0;
}