POJ 2155 二維線段樹 線段樹套線段樹

2021-07-16 20:17:32 字數 1708 閱讀 1677

題目大意:

二維區間裡,某個矩形裡都是01, 選乙個矩形,裡面數字01翻轉。

最後不停的問某個座標是0還是1.

poj不支援c++!1所以常用標頭檔案要注釋掉很多……

大致二維線段樹就是這樣的了……

每個節點都是乙個線段樹。

qc大爺說二維線段樹不支援打標記。好像這題也不用打標記了,只能標記永久化

//#include //#include //#include //#include //using std::tr1::unordered_map;

#include #include #include #include #include using std::sort;

//using std::bitset;

using std::max;

using std::cout;

//using std::stack;

using std::cin;

using std::endl;

using std::swap;

//using std::pair;

//using std::vector;

//using std::set;

//using std::map;

//using std::multiset;

//using std::queue;

using std::greater;

using std::string;

//using std::priority_queue;

//using std::max_element;

//using std::min_element;

//using __gnu_pbds::pairing_heap_tag;

//__gnu_pbds::priority_queue, pairing_heap_tag> heap;

#define hash unordered_map

#define pr(x) cout<

}void x_update(int o, int l, int r)

int ans;

int qx, qy;

void y_query(int k, int o, int l, int r)

int m = l + (r - l)/2;

if (qy <= m) y_query(k, lson);

else y_query(k, rson);

}void x_query(int o, int l, int r)

int m = l + (r - l)/2;

if (qx <= m) x_query(lson);

else x_query(rson);

}void doit()

{ while (m--)

{ char flag;

//prln(flag);

getchar();

scanf("%c", &flag);

//prln(flag);

if (flag=='c')

{ scanf("%d%d%d%d", &xql, &yql, &xqr, &yqr);

//cout<

poj2155 二維線段樹

題目大意 給定初始n n矩陣,所有數都是0,然後有 c 操作 對左上角 x1,y1 到右下角 x2,y2 的矩陣中所有數取非,即0變1,或1變0 還有 q 操作 查詢點 x,y 的值並輸出。思路 構造乙個線段樹,每個結點還是線段樹,外圍線段樹表示x方向,子線段樹表示y方向。查詢時對結點 x,y 所在...

POJ 2155 二維線段樹

題意 給乙個01矩陣,每次可以進行操作將 x1,x2,y1,y2 內的所有元素0變1 1變0。也可以進行詢問,詢問某乙個格仔的0和1。輸出詢問。思路 二維線段樹版題,稍微轉化一下記錄查詢乙個點時它所經過的路徑上經過偶數次修改就為0,奇數次為1。線段樹有兩種寫法,第一種把下標放在樹的結點中,時不時會m...

二維線段樹 poj 2155

題意 t組樣例 輸入 n,m,表示n n的矩陣進行m次操作 c 輸入兩個座標 組成的矩形 進行取反操作 q 對輸的座標位置輸入其值。思路 一開始想的是用1000 表示x軸 個線段樹 對每段y進行操作 來記錄,也是二維的 第一維暴力 第二維線段樹 結果ti 原來還有二維線段樹,每個對應的節點都有一顆線...