记录编号 26765 评测结果 AAAAAAAATT
题目名称 失落的猴子 最终得分 80
用户昵称 GravatarPurpleShadow 是否通过 未通过
代码语言 C++ 运行时间 4.358 s
提交时间 2011-07-26 08:15:07 内存使用 4.08 MiB
显示代码纯文本
#include <cstdio>
const int N=1001;
struct node
{
	int x1,y1,x2,y2;
	int o;
	node* c[4];
	node(const int &_x1,const int &_y1,const int &_x2,const int &_y2,const int &_o):
	x1(_x1),y1(_y1),x2(_x2),y2(_y2),o(_o){c[0]=c[1]=c[2]=c[3]=0;}
};
node* root;
int n,m,k;
void build(int x1,int x2,int y1,int y2,node* &p)
{
	if (x1>x2||y1>y2) return;
	p=new node(x1,y1,x2,y2,-1);
	if (x1==x2&&y1==y2)
	{
		p->o=0;
		return;
	}
	int m1=(x1+x2)>>1,m2=(y1+y2)>>1;
	build(x1,m1,y1,m2,p->c[0]);
	build(x1,m1,m2+1,y2,p->c[1]);
	build(m1+1,x2,y1,m2,p->c[2]);
	build(m1+1,x2,m2+1,y2,p->c[3]);
}
void init()
{
	scanf("%d%d%d",&n,&m,&k);
	build(1,n,1,m,root);
}
inline void push_down(node* p)
{
	if (p->o==-1) return;
	bool flag=1;
	if (p->c[0]) p->c[0]->o=p->o,flag=0;
	if (p->c[1]) p->c[1]->o=p->o,flag=0;
	if (p->c[2]) p->c[2]->o=p->o,flag=0;
	if (p->c[3]) p->c[3]->o=p->o,flag=0;
	if (!flag) p->o=-1;
}
void Cover(int xa,int xb,int ya,int yb,int o,node* p)
{
	if (!p) return;
	push_down(p);
	if (xa<=p->x1&&ya<=p->y1&&xb>=p->x2&&yb>=p->y2)
	{
		p->o=o;
		return;
	}
	int m1=(p->x1+p->x2)>>1,m2=(p->y1+p->y2)>>1;
	if (xa<=m1&&ya<=m2) Cover(xa,xb,ya,yb,o,p->c[0]);
	if (xa<=m1&&yb>m2) Cover(xa,xb,ya,yb,o,p->c[1]);
	if (xb>m1&&ya<=m2) Cover(xa,xb,ya,yb,o,p->c[2]);
	if (xb>m1&&yb>m2) Cover(xa,xb,ya,yb,o,p->c[3]);
}
int G[N][N];
void show(node *p)
{
	if (!p) return;
	push_down(p);
	if (p->x1==p->x2&&p->y1==p->y2)
	{
		G[p->x1][p->y1]=p->o;
		return;
	}
	show(p->c[0]);
	show(p->c[1]);
	show(p->c[2]);
	show(p->c[3]);
}
void slove()
{
	int xa,ya,xb,yb,l;
	while (k--)
	{
		scanf("%d%d%d%d%d",&xa,&ya,&xb,&yb,&l);
		Cover(xa,xb,ya,yb,l,root);
	}
	show(root);
	for (int i=1;i<=n;++i)
	{
		for (int j=1;j<=m;++j)
			printf("%d",G[i][j]);
		printf("\n");
	}
}
int main()
{
freopen("lostmonkey.in","r",stdin);
freopen("lostmonkey.out","w",stdout);
	init();
	slove();
	return 0;
}