poj2155Matrix 二位樹狀陣列

2021-07-02 01:31:14 字數 864 閱讀 7524

大意:告訴你乙個矩陣,初始值全部為0,有兩種操作,1、告訴你x1,y1, x2, y2 把左上角到右下角的矩形的裡面的值全部顛倒   1變0  0變1

第二種操作是查詢某個點的值是0或1

分析:二維的標號法, 對於每乙個矩陣只要把它的四個角進行標記就可以了, 最基本的思路跟理工門前的樹是一樣的

舉個例子:

比如告訴你左上角(x1, y1) 右下角(x2, y2)

那麼對於這個矩形  我們只要把(x1, y1),(x1 + 1, y2),(x2 + 1, y1),(x2 + 1, y2 + 1)標記上

那麼對於每次查詢的話該位置的值就是從該位置到(1, 1)這個矩陣之內的所有的數的和

**:

1 #include 2 #include 3 #include 4

using

namespace

std;56

const

int maxn = 1005;7

8int lowbit(int

x) 11

12int

c[maxn][maxn];

13int

n;14

15void add(int i, int j, int

value)

23 i +=lowbit(i);24}

25}2627

int sum(int i, int

j) 36 i -=lowbit(i);37}

38return

sum;39}

4041

intmain() else64}

65}66return0;

67}68

view code

poj 2155 Matrix(樹狀陣列)

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

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...