Pagini recente » Cod sursa (job #2682593) | Cod sursa (job #199350)
Cod sursa(job #199350)
#include <stdio.h>
int c, n, m, v1[100000], v2[100000], n1, n2;
void swap(int &x, int &y)
{
int t = x; x = y; y = t;
}
int search(int v[], int x, int n)
{
int p, u, m;
p = 1; u = n; m = (p + u) / 2;
while (p <= u)
{
if (v[m] > x && (!v[m-1] || v[m-1] < x)) return v[m];
else if (v[m - 1] > x) u = m - 1;
else if (v[m] < x) p = m + 1;
m = (p + u) / 2;
}
return 0;
}
int main()
{
freopen("gropi.in","r",stdin);
freopen("gropi.out","w",stdout);
int i, x1, x2, y1, y2, d, ok, p;
scanf("%d",&c);
scanf("%d",&n);
for (i = 1; i <= n; i++)
{
scanf("%d %d",&x1,&x2);
if (x1 == 1) v1[++n1] = x2;
else v2[++n2] = x2;
}
scanf("%d",&m);
for (i = 1; i <= m; i++)
{
scanf("%d %d %d %d",&x1,&y1,&x2,&y2);
if (y1 > y2) { swap(x1,x2); swap(y1,y2);}
//d = y2 - y1 + 1;
ok = x1; p = y1;
d = 1;
while (p < y2)
{
if (ok == 1)
{
n = search(v1, p, n1);
if (n && n <= y2)
{
d += n - p;
p = n - 1;
ok = 2;
}
else { d += y2 - p; p = y2; }
}
else
{
n = search(v2, p, n2);
if (n && n <= y2)
{
d += n - p;
p = n - 1;
ok = 1;
}
else { d += y2 - p; p = y2; }
}
}
if (ok != x2) d++;
printf("%d\n",d);
}
return 0;
}