POJ2155 Matrix 二維樹狀陣列

2021-07-26 15:32:53 字數 1371 閱讀 3134

給乙個n*n的矩陣a,其中元素是0或1。a[i][j]表示在第i行第j列的數。最初時,a[i][j]=0(1<=i,j<=n)。我們以以下方式來改變矩陣,給定乙個矩形的左上角為(x1,y1)和右下角為(x2,y2),我們對這個矩形範圍內的所有元素進行「非」操作(如果它是乙個』0』,那麼變化為』1』,否則它變為』0』)。請你編寫乙個程式完成以下兩種操作:

1. c x1 y1 x2 y2 (1<=x1<=x2<=n,1<=y1<=y2<=n) 改變左上角為(x1,y1)和右下角為(x2,y2)矩形範圍內的值。

2. q x y (1 <= x, y <= n) 詢問a[x][y]的值。

輸入檔案的第一行是乙個整數x(x<=10)代表測試資料的組數。對於每組測試資料的第一行包含兩個數字n和t(2<=n<=1000,1<=t<=50000)分別代表矩陣的大小和操作的次數。接下來t行,每行代表乙個指令操作「q x y」或者「c x1 y1 x2 y2」。

輸出檔案若干行,每行對應乙個q操作表示a[x][y]的值。

每組資料間輸出乙個空行分割。

1 2 10

c 2 1 2 2

q 2 2

c 2 1 2 1

q 1 1

c 1 1 2 1

c 1 2 1 2

c 1 1 2 2

q 1 1

c 1 1 2 1

q 2 1

1 0 0 1

這個。。。簡單題加強版。。。

二維樹狀陣列維護,每次統計綜合再mod2即可

沒事又寫了個二維線段樹無限tle

#include

#include

#include

#include

#include

#include

#include

#include

#include

using

namespace

std;

inline

const

int get_int()

while(x>='0'&&x<='9')

return num*bj;

}//樹狀陣列

const

int maxn=1005;

struct bit

void init(int n)

void add(int x,int y,int v)

int sum(int x,int y)

};bit bit;

int t,n,m;

int main() else

}putchar('\n');

}return

0;}

POJ 2155 Matrix 二維樹狀陣列

又是一道樹狀陣列的題目,而且是一道二維的好題 題目要求是,一些操作,可能是對某個矩陣內的所有值取反,可能是問的是某個位置的值 如圖 假如我們要把b矩陣的所有值都取反,我們只需要操縱矩陣的四個頂點即可,更新左下角頂點的值增1相當於把區域abcd的變換次數增1,左上角頂點的值增1,相當於區域ac的變換次...

二維線段樹 POJ 2155 Matrix

風格 www.notonlysuccess.com 題目大意 剛開始,整個矩陣為0 c操作 對乙個矩陣進行0,1取反 q操作求該點的數字是什麼 演算法 二維線段樹,具體自己模擬吧 include include include include include include include incl...

POJ 2155 Matrix 二維線段樹

題目大意 乙個二維座標軸上有很多點,點不是0就是1。然後又兩種操作。c 改變以 x1,y1 為左上頂點 x2,y2 為右下頂點 中的每乙個點 0變1 1變0 q 輸出 a x y 然後每次改變都取異或 這樣的話就意味著改變偶數次就變回來了 奇數次的話就是做了改變的 include include i...