poj2155 二维线段树 区间修改

/*
题目操作就是说,每次操作可以是编辑某个矩形区域,这个区域的0改为1,1改为0,每次查询只查询某一个点的值是0还是1.
我们可以在修改时标记某一个节点,那么这个节点以下的区间就都是要修改的,
当我们在查找的时候,只需要统计查找到这个点时,
一路上有多少个被修改的区间,是偶数说明呗修改回来了,是奇数那就是被修改了。
*/
#include
#include
#include
int n,m;
bool sum[1000*4+10][1000*4+10];
int x1,x2,y1,y2;
int x,y;
int ma;
void buildy(int rt,int left,int right,int xrt)
{
    sum[xrt][rt]=0;
    add[xrt][rt]=0;
    if(left=y1&&right<=y2)
    {
        sum[xrt][rt]=!sum[xrt][rt];
        return ;
    }
    int mid=(left+right)/2;
    if(y1<=mid) updatey(rt*2,left,mid,xrt);
    if(y2>mid) updatey(rt*2+1,mid+1,right,xrt);

}
void update(int rt,int left,int right)
{
    if(left>=x1&&right<=x2)
    {
        updatey(1,1,n,rt);
        return ;
    }
    int mid=(left+right)/2;
    if(x1<=mid) update(rt*2,left,mid);
    if(x2>mid) update(rt*2+1,mid+1,right);

}
void queryY(int rt,int left,int right,int xrt)
{
    ma+=sum[xrt][rt];//一直到查询到自己 看看上面有要修改多少次,偶数表示修改回来了,奇数就表示修改了
    if(left


你可能感兴趣的:(算法-线段树)