Pagini recente » Cod sursa (job #2883918) | Cod sursa (job #2113834) | Cod sursa (job #485255) | Cod sursa (job #55750) | Cod sursa (job #401692)
Cod sursa(job #401692)
{DINH QUANG DAT TIN 07-10}
{GROPI}
CONST
TFI='GROPI.IN';
TFO='gropi.out';
MAX=100001;
TYPE
arr1int=array[0..MAX] of longint;
xy=record
x,y:longint;
end;
VAR
fi,fo:text;
c,res,m,n:longint;
a:array[0..MAX] of xy;
d:array[0..MAX] of longint;
PROCEDURE input;
var
i:longint;
begin
read(fi,c,n);
for i:= 1 to n do
with a[i] do read(fi,y,x);
end;
PROCEDURE swap(var x,y:xy);
var
tg:xy;
begin
tg:=x;
x:=y;
y:=tg;
end;
PROCEDURE sort(l,r:longint);
var
i,j:longint;
k:xy;
begin
i:=l;
j:=r;
k:=a[(l+r) div 2];
repeat
while (a[i].x<k.x) or ((a[i].x=k.x) and (a[i].y<k.y)) do inc(i);
while (a[j].x>k.x) or ((a[j].x=k.x) and (a[j].y>k.y)) do dec(j);
if i<=j then
begin
if i<j then swap(a[i],a[j]);
inc(i);
dec(j);
end;
until i>j;
if l<j then sort(l,j);
if i<r then sort(i,r);
end;
FUNCTION dist(a,b:xy):longint;
begin
dist:=abs(a.x-b.x)+abs(a.y-b.y);
end;
PROCEDURE init;
var
i:longint;
begin
sort(1,n);
d[1]:=0;
for i:= 2 to n do
begin
d[i]:=d[i-1]+dist(a[i],a[i-1]);
if (a[i].x-a[i-1].x)=(a[i-1].y-a[i].y) then d[i]:=0;
end;
end;
FUNCTION findright(x:longint):longint;
var
l,r,mid:longint;
begin
findright:=-1;
l:=1;
r:=n;
while l<=r do
begin
mid:=(l+r) div 2;
if x<=a[mid].x then
begin
r:=mid-1;
findright:=mid;
end else l:=mid+1;
end;
end;
FUNCTION findleft(x:longint):longint;
var
l,r,mid:longint;
begin
findleft:=-1;
l:=1;
r:=n;
while l<=r do
begin
mid:=(l+r) div 2;
if a[mid].x<=x then
begin
l:=mid+1;
findleft:=mid;
end else r:=mid-1;
end;
end;
PROCEDURE process;
var
i,l,r:longint;
s,t,ll,rr:xy;
begin
read(fi,m);
for i:= 1 to m do
begin
read(fi,s.y,s.x,t.y,t.x);
l:=findright(s.x);
r:=findleft(t.x);
if (l=-1) or (r=-1) then res:=dist(s,t)
else
begin
ll:=a[l];
ll.y:=3-ll.y;
rr:=a[r];
rr.y:=3-rr.y;
res:=dist(s,ll)+dist(t,rr)+d[r]-d[l];
end;
writeln(fo,res+1);
end;
end;
BEGIN
assign(fi,tfi);reset(fi);
assign(fo,tfo);rewrite(fo);
input;
init;
process;
close(fo);
close(fi);
END.