1. 程式人生 > >poj 2155 Matrix(二維樹狀陣列)

poj 2155 Matrix(二維樹狀陣列)

樓教主出的二維樹狀陣列。

給出矩陣左上角和右下角座標,矩陣裡的元素 1變0 ,0 變1,然後給出詢問,問某個點是多少。

糾結好久了,一直沒什麼好思路,看discuss說四個角神馬的,我搜了下,理解了,樹狀數組裡記錄該點的變幻次數,或者直接%2也行。

查詢的時候Getsum得到的是該點在所有區間的總變幻次數,最後%2就是結果。

建圖的時候死活想不通,雜四個點的座標是那個 = =。。。剛才協會開會了,在路上想通了,我想的0,0座標是類似座標軸的那種,在左下角。。。而矩陣的0 0 應該是在左上角。。這樣,什麼都通了 = =。。。

還有,更新的時候有的減1了,死迴圈了,發現錯誤了,樹狀數組裡是不能使用下標為1的,所以更新的時候把下標都加一即可。

實驗了下,%2和&1速度一樣。。。

提供座標的圖。。

我見另一種做法,見 http://3214668848.blog.163.com/blog/static/48764919201052484413539/

就是原來的Updata改成Getsum。。。Getsum改成Updata。只不過每個座標不用++了。

這題我還是有點迷茫的。剛才上機組課想了下,經過我畫圖以及認真分析(//害羞)程式碼,終於理解了。。。繼續畫圖先。。

我的程式碼用的是法1.。。