题目链接


题目大意:给你一个矩阵初始值全是0
现在有两个操作:
1.询问(x0,y0)到(x1,y1)这个矩阵内部的异或和1.询问(x0,y0) 到 (x1,y1)这个矩阵内部的异或和1.询问(x0,y0)到(x1,y1)这个矩阵内部的异或和
2.将(x0,y0)到(x1,y1)这个矩阵内部异或上x2.将(x0,y0)到(x1,y1)这个矩阵内部异或上x2.将(x0,y0)到(x1,y1)这个矩阵内部异或上x


解题思路:首先我们先看一维的情况的xor的区间修改和区间查询
1.首先我们知道区间修改的[l,r][l,r][l,r],我们会在lll位置异或上xxx,在r+1r+1r+1的位置再异或一个xxx
2.但是有个问题是在求区间xor和的时候假如说你lll是奇数位那么在后面只有奇数位是有效的因为异或具有可消性所以我们要对区间位置按照奇偶性分成两个树状数组去维护tr[2][maxn]tr[2][maxn]tr[2][maxn]
3.现在是一个二维矩阵那么我们看一下假如说我们在某个(x0,y0)(x_0,y_0)(x0​,y0​)xor一个xxx那么在区间查询的时候它对上面的影响是哪个位置?,就是和(x0,y0)(x_0,y_0)(x0​,y0​)同奇偶的位置


#include<bits/stdc++.h>
#define mid ((l + r) >> 1)
#define Lson rt << 1, l , mid
#define Rson rt << 1|1, mid + 1, r
#define ms(a,al) memset(a,al,sizeof(a))
#define log2(a) log(a)/log(2)
#define _for(i,a,b) for( int i = (a); i < (b); ++i)
#define _rep(i,a,b) for( int i = (a); i <= (b); ++i)
#define for_(i,a,b) for( int i = (a); i >= (b); -- i)
#define rep_(i,a,b) for( int i = (a); i > (b); -- i)
#define lowbit(x) ((-x) & x)
#define IOS std::ios::sync_with_stdio(0); cin.tie(0); cout.tie(0)
#define INF 0x3f3f3f3f
#define LLF 0x3f3f3f3f3f3f3f3f
#define hash Hash
#define next Next
#define pb push_back
#define f first
#define s second
#define y1 Y
using namespace std;
const int N = 1e7 + 10, mod = 1e9 + 7;
const int maxn = 4e5 + 10;
const long double eps = 1e-5;
const int EPS = 500 * 500;
typedef long long ll;
typedef unsigned long long ull;
typedef pair<int,int> PII;
typedef pair<ll,ll> PLL;
typedef pair<double,double> PDD;
const int BUF=30000000;
char Buf[BUF],*buf=Buf;
template<typename T> void read(T &a)
{for(a=0;*buf<48;buf++);while(*buf>47) a=a*10+ *buf++ -48;
}
template<typename T, typename... Args> void read(T &first, Args& ... args)
{read(first);read(args...);
}
ll n, m;
ll tr[2][2][1100][1100];
inline void add(int x, int y, int val) {for(int i = x; i <= 1000; i += lowbit(i))for(int j = y; j <= 1000; j += lowbit(j))tr[x & 1][y & 1][i][j] ^= val;
}inline ll get(int x, int y) {ll res = 0;for(int i = x; i; i -= lowbit(i))for(int j = y; j; j -= lowbit(j))res ^= tr[x & 1][y & 1][i][j];return res;
}int main()
{fread(Buf,1,BUF,stdin);read(n,m);while(m --) {ll op, x, y, x0, y0, val;read(op);if(op == 2) {read(x,y,x0,y0,val);add(x,y,val);add(x,y0+1,val);add(x0+1,y,val);add(x0+1,y0+1,val);} else {ll val = 0;read(x,y,x0,y0);val ^= get(x0,y0);val ^= get(x-1,y0);val ^= get(x0,y-1);val ^= get(x-1,y-1);printf("%lld\n",val);}}return 0;
}

二维树状数组 ---- codeforces341D相关推荐

  1. 二维树状数组 ----2021广东省赛 ----- K - Kera‘s line segment[区间转二维平面+树状数组维护前缀最小最大值]

    题目链接 题目大意: 就是一个一维的数轴上面有一堆线段用一个三元组(l,r,val)(l,r,val)(l,r,val)表示. 现在我们有两个操作: 就是往数轴上面添加线段 询问[L,R][L,R][ ...

  2. szu 寒训第二天 树状数组 二维树状数组详解,以及树状数组扩展应用【求逆序对,以及动态第k小数】

    树状数组(Binary Index Tree) 树状数组可以解决可以转化为前缀和问题的问题 这是一类用以解决动态前缀和的问题 (有点像线段树简版) 1.对于 a1 + a2 + a3 + - + an ...

  3. 【二维树状数组】See you~

    https://www.bnuoj.com/v3/contest_show.php?cid=9148#problem/F [题意] 给定一个矩阵,每个格子的初始值为1.现在可以对矩阵有四种操作: A ...

  4. POJ_1195 Mobile phones 【二维树状数组】

    题目链接:http://poj.org/problem?id=1195 纯纯的二维树状数组,不解释,仅仅须要注意一点,由于题目中的数组从0開始计算,所以维护的时候须要加1.由于树状数组的下标是不能为1 ...

  5. 洛谷1527(bzoj2738)矩阵乘法——二维树状数组+整体二分

    题目:https://www.luogu.org/problemnew/show/P1527 不难想到(?)可以用二维树状数组.但维护什么?怎么查询是难点. 因为求第k小,可以考虑记权值树状数组,把比 ...

  6. 二维树状数组 BZOJ 1452 [JSOI2009]Count

    题目链接 裸二维树状数组 #include <bits/stdc++.h>const int N = 305; struct BIT_2D {int c[105][N][N], n, m; ...

  7. HDU-4456 Crowd 二维树状数组+坐标转换

    题意:给定一个N*N的网格,现在M组操作,一种操作时改变网格上的某个单点的权值,另外一种操作是求到一点曼哈顿距离为小于等于k的所有的权值和,初始化网格所有点的权值为0. 解法:这题如果没有那些特定的条 ...

  8. hdu 1892二维树状数组

    这题我知道是用树状数组,可是好久没打树状数组了,就想用普通方法水过去~~结果--结果--水了好多方法都水不过,出题人真狠呐--我的水方法是对于每一次查询,初始化ans=(x2-x1+1)*(y2-y1 ...

  9. poj 1195(二维树状数组)

    解题思路:这是一道很裸的二维树状数组 AC: #include<stdio.h> #include<string.h> #define N 1100 int c[N][N],n ...

最新文章

  1. html实现pdf预览打印机,Pdf操作(HTML转PDF,PDF直接网页连接打印机)
  2. 一文综述经典的深度文本分类方法
  3. 爱奇艺员工拿到北京户口后辞职,被判赔偿公司十万!
  4. 两个时间计算毫秒在线_SPL 的日期时间函数(下)
  5. 【算法数据结构Java实现】折半查找
  6. BZOJ-2756 奇怪的游戏 黑白染色+最大流+当前弧优化+二分判断+分类讨论
  7. 双系统重装windows以后修复ubuntu的引导
  8. 一个把时间戳转成日期的javascript函数
  9. 看看DelayQueue源码
  10. 多功能pdf编辑器PDF Office Max for mac
  11. Flash 第二章 基本绘图工具-课堂笔记
  12. kjb文件 解析_微信安装包解析异常
  13. JAVA|IO流的练习
  14. 【chrome】谷歌chrome浏览器离线安装包的获取及使用技巧
  15. java 微信 源码_java微信支付功能实现源码
  16. Report Builder简单的使用操作
  17. android 编译libjpeg-turbo
  18. 《阿里云的这群疯子》
  19. linux下CURL工具的使用(常用选项)
  20. 月份加日期前面用on还是in_日期、星期、月份、年份等时间前面用什么介词

热门文章

  1. MySQL数据库排序order by(asc、desc)
  2. python中读取文件过程中seek()函数的使用
  3. 王爽 汇编语言第三版 监测点9.2 监测点9.3 补全编程,利用jcxz指令,利用loop指令,实现在内存2000H段中查找第一个值为0的字节,
  4. 复习计算机网络day1-计算机网络的初步了解
  5. 在自定义的数据集上训练YOLOv5详细教程分享
  6. 十个效果酷炫的Linux系统操作指令(像黑客帝国般的效果~)
  7. 视觉实战|使用人工神经网络进行图像分类
  8. 深度学习中的图像分割:方法和应用
  9. 1003 我要通过! (20point(s))
  10. java~mac下的终端工具oh-my-zsh