Pagini recente » Cod sursa (job #510674) | Cod sursa (job #2691234) | Cod sursa (job #2372490) | Cod sursa (job #1868176) | Cod sursa (job #458681)
Cod sursa(job #458681)
#include<fstream>
#include<algorithm>
using namespace std;
typedef struct { int x, y; } point;
bool cmp(point p1, point p2)
{
return p1.y < p2.y;
}
void read();
void write();
int lower(point p);
int n, c, m;
point g[100001];
int itv[100001], t, cost;
ofstream fout("gropi.out");
int main()
{
read();
return 0;
}
void read()
{
ifstream fin("gropi.in");
fin >> c >> n;
for (int i = 1; i <= n; ++i)
fin >> g[i].x >> g[i].y;
sort(g + 1, g + n + 1, cmp);
itv[++t] = 0;
int aux = 0;
for (int i = 1; i <= n; ++i)
if (g[i].x != aux)
{
itv[++t] = g[i].y;
aux = g[i].x;
}
fin >> m;
point p1, p2;
for (int i = 1; i <= m; ++i)
{
fin >> p1.x >> p1.y >> p2.x >> p2.y;
if (p1.y > p2.y)
swap(p1, p2);
int pos1 = lower(p1);
int pos2 = lower(p2);
cost = pos2 - pos1 + p2.y - p1.y + 1;
cost += (p2.x == p1.x && (pos2 - pos1) % 2 == 1);
cost += (p2.x != p1.x && (pos2 - pos1) % 2 == 0);
write();
}
}
void write()
{
fout << cost << '\n';
}
int lower(point p)
{
int l1 = 1, l2 = t;
while (l1 <= l2)
{
int md = (l1 + l2) >> 1;
l1 = itv[md] < p.y ? md + 1 : l1;
l2 = itv[md] >= p.y ? md - 1 : l2;
}
return l2;
}