题目背景

蕾米莉亚的红雾异变失败后,很不甘心。

题目描述

经过上次失败后,蕾米莉亚决定再次发动红雾异变,但为了防止被灵梦退治,她决定将红雾以奇怪的阵势释放。

我们将幻想乡看做是一个n*m的方格地区,一开始没有任何一个地区被红雾遮盖。蕾米莉亚每次站在某一个地区上,向东南西北四个方向各发出一条无限长的红雾,可以影响到整行/整列,但不会影响到她所站的那个地区。如果两阵红雾碰撞,则会因为密度过大而沉降消失。灵梦察觉到了这次异变,决定去解决它。但在解决之前,灵梦想要了解一片范围红雾的密度。可以简述为两种操作:

1 x y 蕾米莉亚站在坐标(x,y)的位置向四个方向释放无限长的红雾。

2 x1 y1 x2 y2 询问左上点为(x1,y1),右下点为(x2,y2)的矩形范围内,被红雾遮盖的地区的数量。

输入格式

第一行三个整数n,m,q,表示幻想乡大小为n*m,有q个询问。

接下来q行,每行3个或5个整数,用空格隔开,含义见题目描述。

输出格式

对于每一个操作2,输出一行一个整数,表示对应询问的答案。

输入输出样例

输入 #1复制

4 4 3
1 2 2
1 4 4
2 1 1 4 4
输出 #1复制

8

说明/提示

样例解释:

用o表示没有红雾,x表示有红雾,两次释放红雾后幻想乡地图如下:

oxox

xoxo

oxox

xoxo

数据范围:

对于20%的数据,1<=n,m,q<=200

对于 40%的数据,1<=n,m,q<=1000

对于100%的数据,1<=n,m,q<=100000

1<=x1,x2,x<=n x1<=x2

1<=y1,y2,y<=m y1<=y2

by-orangebird

思路:区域前缀和,想到树状数组,重复两次抵消,即交点,则是容斥定理,注意站的点不收影响,即再次站在这会取消上次的影响,需要记录一下

typedef long long LL;
typedef pair<LL, LL> PLL; const int maxm = 1e5+; int Cx[maxm], Cy[maxm], ax[maxm], ay[maxm]; void add(int *C, int x, int val) {
for(; x <= C[]; x += lowbit(x))
C[x] += val;
} int getsum(int *C, int x) {
int ret = ;
for(; x; x -= lowbit(x))
ret += C[x];
return ret;
} int main() {
ios::sync_with_stdio(false), cin.tie();
int n, m, q, type, x1, x2, y1, y2;
cin >> n >> m >> q;
Cx[] = n, Cy[] = m;
while(q--) {
cin >> type;
if(type == ) {
cin >> x1 >> y1;
if(ax[x1]) {
ax[x1] = ;
add(Cx, x1, -);
} else {
ax[x1] = ;
add(Cx, x1, );
}
if(ay[y1]) {
ay[y1] = ;
add(Cy, y1, -);
} else {
ay[y1] = ;
add(Cy, y1, );
}
} else if(type == ) {
cin >> x1 >> y1 >> x2 >> y2;
int s1 = getsum(Cx, x2) - getsum(Cx, x1-);
int s2 = getsum(Cy, y2) - getsum(Cy, y1-);
cout << 1LL*(y2-y1+)*s1 + 1LL*(x2-x1+)*s2-1LL*s1*s2*<<"\n";
}
}
return ;
}

最新文章

  1. SpringBoot和数据库连接
  2. Marbles启动信息
  3. SrcollView分页加载数据(第二种方法 自定义listView)
  4. 哈希值识别工具hash-identifier
  5. oracle object_id和data_object_id的区别
  6. 整型数组处理算法(八)插入(+、-、空格)完成的等式:1 2 3 4 5 6 7 8 9=N[华为面试题]
  7. hdu 4790 Just Random (思路+分类计算+数学)
  8. 使用MySQL-Proxy读写分离时的注意事项
  9. Object.assign()
  10. redis安装以及安全配置
  11. powershell 定时删除脚本
  12. .NET上传大文件时提示Maximum request length exceeded错误的解决方法
  13. Spring MVC 原理探秘 - 一个请求的旅行过程
  14. 04 复制删除行为IDA反汇编
  15. matrix 矩阵(多维DP)
  16. Error 之 只能在执行Render() 的过程中调用 RegisterForEventValidation;
  17. JNUOJ 1184 - 科学计数法
  18. TCGA系列--LncMAP
  19. 二进制搭建kubernetes多master集群【四、配置k8s node】
  20. SQL Server (MSSQLSERVER) 无法启动,错误代码 3417,提示Windows不能在本地计算机启动。

热门文章

  1. iOS之Xcode提交App中断出现:Cannot proceed with delivery: an existing transporter instance is currently uploading this package
  2. 使用KVC键值编码
  3. java是什么
  4. Jlink不报错的方法
  5. Spark入门:第4节 Spark程序:1 - 9
  6. C++ class with pointer member(s)
  7. Servlet对用户输入的数据进行读取
  8. kubernetes 使用flannel网络模式 错误分析
  9. ubuntu14 安装Node.js
  10. js读取本地json/txt/xml存在跨越问题,可以用jsonp 读取本地json文件