poj 2155 Matrix 樹狀陣列的應用

2021-06-25 23:51:23 字數 1004 閱讀 7048

對於乙個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]處被換了幾次就能確定現在這個格仔是幾。重點就是怎樣快速計算[x,y]格仔被換了幾次。操作方法是將[x1,y1][x1,y2+1][x2+1,y1][x2+1,y2+1]格仔出增加1,對於[x,y]只需求[1,1]到[x,y]的和就是[x,y]出被換了幾次。

若轉化成一維的,感覺和多校的一道題挺像,hdu 4970

詳解

#include #include #include #include #include #include #include #include #include #include #include #include #include #include #define ll __int64

//#define ll long long

#define eps 1e-9

#define pi acos(-1.0)

using namespace std;

const int inf = 0x3f3f3f3f;

const int mod = 10000007;

int c[1010][1010];

int n,m;

int lowbit(int x)

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

x += lowbit(x); }}

int sum(int x, int y)

x -= lowbit(x);

} return s;

}int main()

else

}printf("\n");

} return 0;

}

poj 2155 Matrix(樹狀陣列)

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

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 二維樹狀陣列

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