poj 2155 Matrix(樹狀陣列)

2021-08-03 23:36:36 字數 669 閱讀 3974

題目大意:提供乙個 m*n的矩陣,其中每乙個格仔中的數不是 1 就是 0, 初始時每乙個格仔的值為 0 ,我們可以修改這個矩陣中的數字,每次給出矩陣的左上角座標(x 1 ,y 1 ) ,以及右下角的座標(x 2 , y 2 ) ,並且將矩陣中的數字全部取反(原來是 1 現在變成 0 ,原來是0 現在變成 1),還可以每次查詢第 x 行第 y 列的格仔中的數字是什麼。

思路:首先因為只有1和0,所以我們可以把它看做為翻轉的次數,偶數為0,奇數1

其次我們將對矩形((x 1 ,y 1 ) ->(x 2 , y 2 ))內所有數翻轉,轉變為對四個點(x1,y1)(x1-1,y2)(x2+1,y1)(x2+1,y2+1)翻轉

詢問即相當於求(0,0)->(x,y)的和

至於具體原因參考**

#include#include#include#includeusing namespace std;

const int maxn =1000*2;

int n,m,k;

int treenum[maxn][maxn];

int lowbit(int x)

long long getsum(int x,int y)

return sum;

}void add(int x ,int y, int val){//二維

for(int i=x;i

poj2155 Matrix 樹狀陣列套樹狀陣列

給定一些二維陣列中的操作形如c x1 y1 x2 y2表示把 x1,y1 到 x2,y2 中的數字0變成1,1變成0,q x y表示查詢 x,y sb題,直接二維樹狀陣列套樹狀陣列。至於0還是1的問題可以看成操作了x次就是x 2,按照類似矩陣字首和的方法更新 include include defi...

poj 2155 Matrix 樹狀陣列的應用

對於乙個n n n 1000 的01矩陣,初始全為0,有兩種操作。c x1 y1 x2 y2 分別代表矩陣的左上角和右下角,將這個矩陣中的01互換,原為0的變為1,原為1的變為0。q x y詢問a x,y 現在是幾。因為只有01的互換,且原始為0,那麼只需計算 x,y 處被換了幾次就能確定現在這個格...

POJ 2155 Matrix 二維樹狀陣列

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