題意:乙個01矩陣,進行兩種操作,一種是對乙個子矩陣的數字進行反轉,0變1,1變0。還有一種是查詢乙個數字。
這裡涉及頻繁的區間修改和查詢,可以考慮使用樹狀陣列。
因為是乙個矩陣,所以要拓展到二維。是區間修改和單點查詢所以使用向下修改,向上統計。重點在於二維樹狀陣列的add和getsum怎麼寫。
然後是因為getsum得到的都是從原點到對應點的乙個矩陣的和,所以要得到乙個子矩陣可以考慮使用4個從原點開始的矩陣進行加減得到對應的子矩陣。
#include#include#include#include#include #define ll long long int
using namespace std;
int t, n, m;
int c[1005][1005];
char s[3];
int lowbit(int x)
void add(int x, int y, int num) }}
int getsum(int x, int y)
} return sum;
}int main()
} while (m--)
else if (s[0] == 'q')
}printf("\n");
}}
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...
POJ 2155 Matrix 二維線段樹
題目大意 乙個二維座標軸上有很多點,點不是0就是1。然後又兩種操作。c 改變以 x1,y1 為左上頂點 x2,y2 為右下頂點 中的每乙個點 0變1 1變0 q 輸出 a x y 然後每次改變都取異或 這樣的話就意味著改變偶數次就變回來了 奇數次的話就是做了改變的 include include i...