HDU 3911 線段樹 LAZY操作 成段更新

2021-06-18 05:29:40 字數 624 閱讀 9955

成段更新中只有0變1,或1變0; so只用三個值記錄此段中0,1狀態即可

線段樹結構體構造:

data[k].l1  data[k].l0  : 分別代表此區間從左端起(必須包括最左端) 最長連續1和0

data[k].r1  data[k].r0 : 分別代表此區間從右端起(必須包括最右端) 最長連續1和0

data[k].m1 data[k].m0:  分別代表此區間內最長連續1和0

data[k].xor 代表其子區間是否需要進行lazy操作

#include "stdio.h"

#include "string.h"

#include "math.h"

#include "stdlib.h"

#include "algorithm"

using namespace std;

struct comp

data[300005];

int max(int a,int b)

pushup(k);

}int query(int l,int r,int k)

}int main()

} return 0;

}

hdu3911 線段樹,區間合併,延遲標記

題意 就是給你一段由0和1組成的序列,然後有兩種操作 0 a b就是問從a到b最長的連續的1的長度為多少,1 a b就是把從a到b的資料是一的更新為0,是零的更新為1.思路 用乙個結構體,lone表示從最左邊數連續1的長度,lzero表示從左邊數連續0的長度,rone表示從右邊數連續1的長度,rze...

例題 線段樹 lazy

1 1 lazy思想 對整個結點進行的操作,先在結點上做標記,而並非真正執行,直到根據查詢操作的需要分到下層。2 延遲標記 lazy 如果需要對乙個區間中每乙個葉結點進行操作,我們不妨先別忙著操作,而是在所有大區間上做乙個標記,下一次遇到或要用到時,再進行處理 標記傳遞 達到減少操作次數,提高線段樹...

線段樹 lazy標記

每個節點代表區間 唯一根節點,也就是全部區間 葉節點是長度為1的子區間,也就是所代表陣列上的乙個點 const int maxn 1e3 struct segmenttree e 4 maxn 建樹 void build int p,int l,int r int mid l r 2 build p...