记录编号 410257 评测结果 AAAAAAAAAA
题目名称 [HAOI 2012]矩形覆盖a 最终得分 100
用户昵称 GravatarFoolMike 是否通过 通过
代码语言 C++ 运行时间 8.275 s
提交时间 2017-05-31 13:55:00 内存使用 78.26 MiB
显示代码纯文本
#include<cstdio>
#include<algorithm>
using namespace std;
const int N=1e7+10;
int n,m,q,a[N],cnt[N],tp,x1,y1,x2,y2;
//a[i]表示每个不被覆盖时黑点个数,cnt[i]表示被覆盖次数
void modify(int x,int lx,int ly,int rx,int ry,int d){
	if (lx>rx||ly>ry) return;
	if (lx>=x1&&rx<=x2&&ly>=y1&&ry<=y2) return void(cnt[x]+=d);
	int mx=(lx+rx)>>1,my=(ly+ry)>>1;
	if (x1<=mx){
		if (y1<=my) modify(x<<2,lx,ly,mx,my,d);
		if (y2>my) modify(x<<2|1,lx,my+1,mx,ry,d);
	}
	if (x2>mx){
		if (y1<=my) modify(x<<2|2,mx+1,ly,rx,my,d);
		if (y2>my) modify(x<<2|3,mx+1,my+1,rx,ry,d);
	}
	a[x]=0;
	a[x]+=cnt[x<<2]?(mx-lx+1)*(my-ly+1):a[x<<2];
	a[x]+=cnt[x<<2|1]?(mx-lx+1)*(ry-my):a[x<<2|1];
	a[x]+=cnt[x<<2|2]?(rx-mx)*(my-ly+1):a[x<<2|2];
	a[x]+=cnt[x<<2|3]?(rx-mx)*(ry-my):a[x<<2|3];
}
int main()
{
	freopen("jxfgx.in","r",stdin);
	freopen("jxfgx.out","w",stdout);
	scanf("%d%d%d",&n,&m,&q);
	while (q--){
		scanf("%d%d%d%d%d",&tp,&x1,&y1,&x2,&y2);
		modify(1,1,1,n,m,tp==1?1:-1);
		printf("%d\n",cnt[1]?n*m:a[1]);
	}
	return 0;
}