记录编号 |
410257 |
评测结果 |
AAAAAAAAAA |
题目名称 |
[HAOI 2012]矩形覆盖a |
最终得分 |
100 |
用户昵称 |
FoolMike |
是否通过 |
通过 |
代码语言 |
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;
}