Pagini recente » Cod sursa (job #501148) | Cod sursa (job #2479470) | Cod sursa (job #2406416) | Cod sursa (job #577483) | Cod sursa (job #1747203)
#include <bits/stdc++.h>
#define pii pair < int, int >
#define mp make_pair
#define x first
#define y second
#define maxN 100002
using namespace std;
int n, m, k, ans, ps[maxN];
pii v[maxN];
int bs(pii a)
{
int i = 0, p = 1 << 16;
while (p)
{
if (i + p <= n && v[i + p] < a)
i += p;
p >>= 1;
}
return i + 1;
}
void read()
{
int i;
freopen("gropi.in", "r", stdin);
scanf("%d %d", &k, &n);
for (i = 1; i <= n; ++ i)
scanf("%d %d", &v[i].y, &v[i].x);
}
void solve()
{
int i;
v[++ n] = mp(0, 0);
v[++ n] = mp(k + 1, 0);
sort(v + 1, v + n + 1);
for (i = 1; i <= n; ++ i)
ps[i] = ps[i - 1] + (v[i].y != v[i + 1].y);
}
void write()
{
freopen("gropi.out", "w", stdout);
scanf("%d", &m);
while (m --)
{
pii a, b;
scanf("%d %d %d %d\n", &a.y, &a.x, &b.y, &b.x);
if (a > b)
swap(a, b);
int x = bs(mp(a.x, 0)), y = bs(mp(b.x, 0)) - 1;
//printf("%d %d\n", x, y);
if (v[x].x >= b.x)
ans = b.x - a.x + 1 + (b.y != a.y);
else
{
ans = b.x - a.x + 1 + ps[y - 1] - ps[x - 1];
ans += (a.y == v[x].y) + (b.y == v[y].y);
}
printf("%d\n", ans);
}
}
int main()
{
read();
solve();
write();
return 0;
}