poj 2155 懶惰標記二維線段樹

2021-08-25 17:30:13 字數 999 閱讀 1094

解題思路:

這裡簡單粗暴的用了懶人標記的二維線段樹,實際上可以利用01異或的性質可以不用去更新兒子,直接把有包含(x,y)點的矩陣都異或起來就行了。

#include#include#include#define lson l,mid,rt<<1

#define rson mid+1,r,rt<<1|1

using namespace std;

typedef long long ll;

const int mx = 1e3 + 5;

int sum[mx*3][mx*3],m,n;

int l1,r2,l2,r1,u,flag,val[mx][mx];

void update_y(int l,int r,int rt,int d)

int mid = (l+r)>>1;

if(l2<=mid) update_y(lson,d);

if(r2>mid) update_y(rson,d);

}void update_x(int l,int r,int rt)

int mid = (l+r)>>1;

if(l1<=mid) update_x(lson);

if(r1>mid) update_x(rson);

}void query_y(int l,int r,int rt,int d)

sum[d][rt<<1] += sum[d][rt],sum[d][rt<<1|1] += sum[d][rt];

sum[d][rt] = 0;

int mid = (l+r)>>1;

if(r1<=mid) query_y(lson,d);

else query_y(rson,d);

}void query_x(int l,int r,int rt)

int main()

else

} puts("");

} return 0;

}

poj2155 二維線段樹

題目大意 給定初始n n矩陣,所有數都是0,然後有 c 操作 對左上角 x1,y1 到右下角 x2,y2 的矩陣中所有數取非,即0變1,或1變0 還有 q 操作 查詢點 x,y 的值並輸出。思路 構造乙個線段樹,每個結點還是線段樹,外圍線段樹表示x方向,子線段樹表示y方向。查詢時對結點 x,y 所在...

POJ 2155 二維線段樹

題意 給乙個01矩陣,每次可以進行操作將 x1,x2,y1,y2 內的所有元素0變1 1變0。也可以進行詢問,詢問某乙個格仔的0和1。輸出詢問。思路 二維線段樹版題,稍微轉化一下記錄查詢乙個點時它所經過的路徑上經過偶數次修改就為0,奇數次為1。線段樹有兩種寫法,第一種把下標放在樹的結點中,時不時會m...

二維線段樹 poj 2155

題意 t組樣例 輸入 n,m,表示n n的矩陣進行m次操作 c 輸入兩個座標 組成的矩形 進行取反操作 q 對輸的座標位置輸入其值。思路 一開始想的是用1000 表示x軸 個線段樹 對每段y進行操作 來記錄,也是二維的 第一維暴力 第二維線段樹 結果ti 原來還有二維線段樹,每個對應的節點都有一顆線...