[分治]USACO/rect1 Shaping Regions
时间:2010-11-17 来源:I WILL BE BETTER.

var x1,x2,y1,y2,c:array[0..1000]of longint;
ans:array[1..3000]of longint;
i,j,k,n,max:longint;
procedure make(l,r,u,d,k,c:longint);
begin
while (k<=n)and((r<=x1[k])or(l>=x2[k])or(u>=y2[k])or(d<=y1[k])) do inc(k);
if k>n then begin ans[c]:=ans[c]+(r-l)*(d-u);exit;end;
if l<=x1[k] then begin make(l,x1[k],u,d,k+1,c);l:=x1[k];end;
if r>=x2[k] then begin make(x2[k],r,u,d,k+1,c);r:=x2[k];end;
if (u<=y1[k]) then begin make(l,r,u,y1[k],k+1,c);u:=y1[k];end;
if (d>=y2[k]) then begin make(l,r,y2[k],d,k+1,c);d:=y2[k];end;
end;
begin
assign(input,'rect1.in');reset(input);
assign(output,'rect1.out');rewrite(output);
readln(x2[0],y2[0],n);
c[0]:=1;
for i:=1 to n do
begin
readln(x1[i],y1[i],x2[i],y2[i],c[i]);
if c[i]>max then max:=c[i];
end;
for i:=n downto 0 do
begin
make(x1[i],x2[i],y1[i],y2[i],i+1,c[i]);
end;
for i:=1 to max do
if ans[i]<>0 then writeln(i,' ',ans[i]);
close(input);close(output);
end.
相关阅读 更多 +