樹狀陣列POJ2155

2021-05-21 21:39:17 字數 473 閱讀 3230

poj 2155是一道很不錯的題目,表面上看,這題的要求似乎和樹狀陣列的使用方法恰好相反,改變的是乙個區間,查詢的反而是乙個點。實際上可以通過乙個轉化巧妙的解決。

首先對於每個數a定義集合up(a)表示 定義集合down(a)表示。可以發現對於任何a於是對於這道題目來說,翻轉乙個區間[a,b](為了便於討論先把原問題降為一維的情況),我們可以把down(b)的所有元素的翻轉次數+1,再把down(a-1)的所有元素的翻轉次數-1。而每次查詢乙個元素c時,只需要統計up(c)的所有元素的翻轉次數之和,即為c實際被翻轉的次數。

實際實現時,由於只考慮奇偶,因此無須統計確切的翻轉次數。另外,如果翻轉up(a)和up(b+1),查詢down(c),也是同樣的效果。這種方法可以很容易地擴充套件到二維情況。比起線段樹、四分樹之類的常規思路,無論程式設計複雜度還是常數速度上都有很大優勢。

poj 2155 (二維樹狀陣列)

這個題目就是給你乙個0 1矩陣,每次給你乙個長方形的矩形,在矩形內的所有資料都做非運算。看出來是乙個二維的樹狀陣列,就是求每個點經過了幾次翻轉,而c陣列就是記錄翻轉的個數的!相當於加 1 q時就做 2或者是 2運算 很基礎的模板題。include include include include us...

poj2155(二維樹狀陣列)

題意 乙個n n的矩陣,兩種操作,更新以a x1,y1 為左上角,a x2,y2 為右下角的矩陣,查詢a i,j 點的值 思路 二維樹狀陣列好題,就查詢操作而言,只要知道那個點的翻轉次數的奇偶性就可以了,所以每次操作我們只需要更新四個點,然後求 1,1 到該點的sum 然後就可知道他的奇偶性了,至於...

poj 2155(二維樹狀陣列)

題意 給出一組資料,初始值全部為0,再給出兩個座標,對在這範圍之類的資料取反 1變為0,0變為1 在訊問乙個點,輸出那個點的值。思路 二維樹狀陣列,區間更新,單點求值,先將取反次數相加,在對2取餘。includeusing namespace std define max 1010 int c ma...