matrix 樓教主出的題目。
題意:乙個矩陣初始值都為0,每次給「c x1 y1 x2 y2" 去反轉這個矩陣。或者"q x1 y1"查詢這個點是0/1。
第一次接觸樹套樹的題目。
一句ac:對於基本的線段樹,再在每個節點建乙個y方向上的線段樹。tree[n][m]
這道題目更新的時候,對於x方向就是(x1,x2)這個區間,再在其上對y1,y2進行更新。
對於查詢,x方向上,自頂向下到x1都要對y進行查詢(更新的區間必包括該點),y方向上則更新到y1.
#include #include #define maxn 1005
#define mem(a) memset(a, 0, sizeof(a))
bool tree[maxn<<2][maxn<<2];
int x, n, t;
int num, x1, x2, y1, y2;
char ch[10];
void updatey(int yl,int yr,int xp,int yp)
int mid=(yl+yr)>>1;
if(y1<=mid) updatey(yl,mid,xp,yp<<1);
if(y2>mid ) updatey(mid+1,yr,xp,yp<<1|1);
}void updatex(int xl,int xr,int xp)
int mid=(xl+xr)>>1;//下面這句剛開始寫錯了,按照build寫了,忘記是個更新操作...
if(x1<=mid) updatex(xl,mid,xp<<1);
if(x2>mid) updatex(mid+1,xr,xp<<1|1);
}void queryy(int yl,int yr,int xp,int yp)
void queryx(int xl,int xr,int xp)
int main()
{ while(~scanf("%d", &x))while(x--)
{mem(tree);
scanf("%d %d%*c", &n,&t);
for(int i=0;i
POJ 2155 二維線段樹 線段樹套線段樹
題目大意 二維區間裡,某個矩形裡都是01,選乙個矩形,裡面數字01翻轉。最後不停的問某個座標是0還是1.poj不支援c 1所以常用標頭檔案要注釋掉很多 大致二維線段樹就是這樣的了 每個節點都是乙個線段樹。qc大爺說二維線段樹不支援打標記。好像這題也不用打標記了,只能標記永久化 include inc...
樹套樹 線段樹套set
請你寫出一種資料結構,來維護乙個長度為 n 的序列,其中需要提供以下操作 1 pos x,將 pos 位置的數修改為 x。2 l r x,查詢整數 x 在區間 l,r 內的前驅 前驅定義為小於 x,且最大的數 數列中的位置從左到右依次標號為 1 n。區間 l,r 表示從位置 l 到位置 r 之間 包...
初學樹套樹 線段樹套Treap
樹套樹是乙個十分神奇的演算法,種類也有很多 像什麼樹狀陣列套主席樹 樹狀陣列套值域線段樹 zkw 線段樹套 vector 等等。不過,像我這麼弱,當然只會最經典的線段樹套 treap 啦。線段樹我相信大家都會的,treap 可以看一下這篇部落格 簡析平衡樹 二 treap 線段樹套 treap 的思...