USACO 3.1.4
cpp:
#include <bits/stdc++.h>
using namespace std;
const int maxn=2001;
struct lrj233{
int x1,x2,y1,y2,c;
}sp[maxn];
int p[maxn][maxn],ys[maxn],a,b,n,cntx,cnty,tx[maxn],ty[maxn],ta[maxn],tb[maxn],zx[maxn],zy[maxn];
int main(){
scanf("%d%d%d",&a,&b,&n);
tx[0]=tx[a]=1;
ty[0]=ty[b]=1;
for(int i=1;i<=n;i++){
scanf("%d%d%d%d%d",&sp[i].x1,&sp[i].y1,&sp[i].x2,&sp[i].y2,&sp[i].c);
tx[sp[i].x1]=1;
tx[sp[i].x2]=1;
ty[sp[i].y1]=1;
ty[sp[i].y2]=1;
}
for(int i=0;i<=a;i++)
if(tx[i]){
zx[cntx]=i;
tx[i]=cntx;
cntx++;
}
cntx--;
for(int i=0;i<=b;i++)
if(ty[i]){
zy[cnty]=i;
ty[i]=cnty;
cnty++;
}
cnty--;
for(int i=1;i<=n;i++)
for(int j=tx[sp[i].x1];j<tx[sp[i].x2];j++)
for(int k=ty[sp[i].y1];k<ty[sp[i].y2];k++)
p[j][k]=sp[i].c;
for(int i=0;i<cntx;i++)
for(int j=0;j<cnty;j++)
ys[p[i][j]]+=(zx[i+1]-zx[i])*(zy[j+1]-zy[j]);
ys[1]+=ys[0];
for(int i=1;i<=1000;i++)
if(ys[i])
printf("%d %d\n",i,ys[i]);
return 0;
}