题目链接: Matrix
题意
给你一个N*N矩阵,初始都为0,有两种操作,是C操作的话就是把左上角坐标为(X1,Y1),右下角坐标为(X2,Y2)的矩阵的元素变一下,原来是1就变成0,是0就变成1;是Q 操作的话就是 询问坐标为(X1,Y1)的元素是多少。
思路
相比较一维,二维变成了树套树,我们的思路是每次更新,先找一维坐标的相应区间,找到后再到二维区间中找对应的,找到区间后,把此区间的tree[]变一下,注意我们这题不需要pushdown函数,因为如果我们要查询某一区间是变成1还是0,我们只需要直到所有与它相关的区间有多少个1,如果总和是奇数,说明变成了1。
#include <cstdio>
#include <iostream>
#include <algorithm>
#include <cstring>
using namespace std;
int tree[1001<<2][1001<<2],X1,X2,Y1,Y2,sum,n;
void update2(int xnode,int ynode,int begin,int end,int Y1,int Y2)
{
if(Y1>end || Y2<begin)
return;
if(Y1<=begin && Y2>=end)
{
tree[xnode][ynode]=!tree[xnode][ynode];
return;
}
int mid