usaco 3.1 rect1 2008.7.18
{过了前十组,最后一组超强数据,过不了,如果要过的话,需要很大的空间,但是,占用的空间太大,则不予以测评}
{
ID:
PROG: rect1
LANG: PASCAL
}
program p_rect1;
const fin='rect1.in';fout='rect1.out';
maxab=1000;maxn=100;
var sum:array[1..100]of longint;
x:array[1..maxn,1..2]of longint;
y:array[1..maxn,1..2]of longint;
map:array[0..maxab,0..maxab]of boolean;
t:array[1..maxn]of 1..4;
f1,f2:text;
a,b,n,o:longint;
procedure init;
var i:longint;
begin
assign(f1,fin);reset(f1);assign(f2,fout);rewrite(f2);
read(f1,a,b,n);
for i:=1 to n do
begin
read(f1,x[i,1],x[i,2],y[i,1],y[i,2],t[i]);
dec(y[i,1]);dec(y[i,2]);
end;
end;
procedure doit;
var i,j,k,s:longint;
begin
fillchar(map,sizeof(map),true);
o:=a*b;
fillchar(sum,sizeof(sum),0);
for i:=x[n,1] to y[n,1] do
for j:=x[n,2] to y[n,2] do
map[i,j]:=false;
inc(sum[t[n]],(y[n,1]-x[n,1]+1)*(y[n,2]-x[n,2]+1));
if t[n]<>1 then dec(o,(y[n,1]-x[n,1]+1)*(y[n,2]-x[n,2]+1));
writeln(o);
for k:=n-1 downto 1 do
begin
s:=0;
for i:=x[k,1] to y[k,1] do
for j:=x[k,2] to y[k,2] do
if map[i,j] then begin inc(s);map[i,j]:=false;end;
inc(sum[t[k]],s);
if t[k]<>1 then dec(o,s);
end;
end;
procedure print;
var i:longint;
begin
if o<>0 then writeln(f2,'1 ',o);
for i:=2 to 100 do
if sum[i]<>0 then
writeln(f2,i,' ',sum[i]);
end;
{----------------------------------------------}
begin
init;
doit;
print;
close(f1);close(f2);
end.