博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
poj2155
阅读量:6452 次
发布时间:2019-06-23

本文共 1910 字,大约阅读时间需要 6 分钟。

题意

二维区间更新,单点查询。

分析

二维线段树。

也可以用二维树状数组去做,维护矩阵前缀和。

code

#include
using namespace std;typedef long long ll;#define lson l, m, rt << 1#define rson m + 1, r, rt << 1 | 1const int MAXN = 4001;int n, val[MAXN][MAXN];int x, y, xl, xr, yl, yr;void subBuild(int xrt, int l, int r, int rt) { val[xrt][rt] = 0; if(l != r) { int m = l + r >> 1; subBuild(xrt, lson); subBuild(xrt, rson); }}void build(int l, int r, int rt) { subBuild(rt, 1, n, 1); if(l != r) { int m = l + r >> 1; build(lson); build(rson); }}void subUpdate(int xrt, int l, int r, int rt) { if(l >= yl && r <= yr) val[xrt][rt] ^= 1; else { int m = l + r >> 1; if(yl <= m) subUpdate(xrt, lson); if(yr > m) subUpdate(xrt, rson); }}void update(int l, int r, int rt) { if(l >= xl && r <= xr) subUpdate(rt, 1, n, 1); else { int m = l + r >> 1; if(xl <= m) update(lson); if(xr > m) update(rson); }}int ans;void subQuery(int xrt, int l, int r, int rt) { ans ^= val[xrt][rt]; if(l != r) { int m = l + r >> 1; if(y <= m) subQuery(xrt, lson); else subQuery(xrt, rson); }}void query(int l, int r, int rt) { subQuery(rt, 1, n, 1); if(l != r) { int m = l + r >> 1; if(x <= m) query(lson); else query(rson); }}int main() { int T; scanf("%d", &T); while(T--) { int q; scanf("%d%d", &n, &q); build(1, n, 1); while(q--) { char s[2]; scanf("%s", s); if(s[0] == 'C') { scanf("%d%d%d%d", &xl, &yl, &xr, &yr); update(1, n, 1); } else { scanf("%d%d", &x, &y); ans = 0; query(1, n, 1); printf("%d\n", ans); } } if(T) puts(""); } return 0;}

转载于:https://www.cnblogs.com/ftae/p/7746238.html

你可能感兴趣的文章
算法专题(1)-信息学基本解题流程!
查看>>
模拟文件系统
查看>>
iOS项目分层
查看>>
UML关系图
查看>>
一个action读取另一个action里的session
查看>>
leetcode 175. Combine Two Tables
查看>>
如何给一个数组对象去重
查看>>
Guava包学习-Cache
查看>>
2019-06-12 Java学习日记之JDBC
查看>>
灯箱效果(点击小图 弹出大图集 然后轮播)
查看>>
linux c 笔记 线程控制(二)
查看>>
samba服务器配置
查看>>
vue.js笔记
查看>>
【Unity3D入门教程】Unity3D之GUI浅析
查看>>
Hive 简单操作
查看>>
湘潭1247 Pair-Pair(树状数组)
查看>>
IEnumerable<T>
查看>>
IntelliJ IDEA 注册码
查看>>
linux 上面配置apache2的虚拟目录
查看>>
Linux学习总结 (未完待续...)
查看>>