簡單線段樹(模板)

2022-05-02 15:33:12 字數 3399 閱讀 6254

hdu - 1754 

模板,單點更新,區間查詢

1 #include 2 #include 3 #include 

4 #include 5 #include

6 #include 7 #include 8 #include 9 #include 10 #include 11 #include 12

#define lson l,m,rt<<1

13#define rson m+1,r,rt<<1|1

14using

namespace

std;

15const

double pi=3.14159265358979323846

;16 typedef long

long

ll;17

const

int dx[5]=;

18const

int dy[5]=;

19const

int inf = 0x3f3f3f3f;20

const

int ninf = 0xc0c0c0c0;21

const

int maxn=200000+5;22

const ll mod=1e9+7;23

int tree[maxn<<2

];24

//向上更新

25void pushup(int

rt)28

//建樹

29void build(int l,int r,int

rt)34

int m=(l+r)>>1;35

build(lson);build(rson);

36pushup(rt);

37}

38//

單點更新

39void update(int p,int add,int l,int r,int

rt)44

int m=(l+r)>>1;45

if(p<=m) update(p,add,lson);

46else

update(p,add,rson);

47pushup(rt);

48}

49//

區間查詢

50int query(int l,int r,int l,int r,int

rt)54

int m=(l+r)>>1;55

int ret=ninf;

56if(l<=m) ret=max(ret,query(l,r,lson));

57if(r>m) ret=max(ret,query(l,r,rson));

58return

ret;

59}

6061

intmain()

6274}75

return0;

76 }

view code

poj - 3468 

這個題呀,錯了個符號,調了半天。區間修改加區間查詢

1 #include 2 #include 3 #include 

4 #include 5 #include

6 #include 7 #include 8 #include 9 #include 10 #include 11 #include 12

#define lson l,m,rt<<1

13#define rson m+1,r,rt<<1|1

14using

namespace

std;

15const

double pi=3.14159265358979323846

;16 typedef long

long

ll;17

const

int dx[5]=;

18const

int dy[5]=;

19const

int inf = 0x3f3f3f3f;20

const

int ninf = 0xc0c0c0c0;21

const

int maxn=100000+5;22

const ll mod=1e9+7;23

24 ll tree[maxn<<2

];25 ll add[maxn<<2

]; 26

//向上更新

27void pushup(int

rt)30

//向下更新

31void pushdown(int rt,int

m)39}40

//建樹

41void build(int l,int r,int

rt)47

int m=(l+r)>>1;48

build(lson);build(rson);

49pushup(rt);

50}

51//

單點更新

52void updatepoint(int p,int add,int l,int r,int

rt)57 pushdown(rt,r-l+1

);58

int m=(l+r)>>1;59

if(p<=m) updatepoint(p,add,lson);

60else

updatepoint(p,add,rson);

61pushup(rt);

62}

63//

區間更新

64void updatequery(int l,int r,int c,int l,int r,int

rt)70 pushdown(rt,r-l+1

);71

int m=(l+r)>>1;72

if(l<=m) updatequery(l,r,c,lson);

73if(r>m) updatequery(l,r,c,rson);

74pushup(rt);

75}

76//

區間查詢

77 ll query(int l,int r,int l,int r,int

rt)81 pushdown(rt,r-l+1

);82

int m=(l+r)>>1

;83 ll ret=0;84

if(l<=m) ret+=query(l,r,lson);

85if(r>m) ret+=query(l,r,rson);

86return

ret;

87}

88int

main()

89else

103

107}

108return0;

109 }

view code

簡單線段樹模板

入門第四天,前三天的沒時間補,回去再慢慢寫吧。今天學長講的是線段樹,講得很有老師的感覺.然後就是講的也都差不多聽懂了,只是有些細節在寫 的時候沒有注意到,一直錯。需要注意的點 1.在build的時候在left right時是node u a left 之前老是錯寫成node left a left ...

hdu 1556 簡單線段樹

漢語題,不解釋 思路 此題是線段樹的染色,先分段染色,可以nlogn級別,在算出每個位置的染色數 求染色數的時候,有兩種方法 1,用乙個數記錄step的值,之後除以2,把每個值相加,直到為一時結束 為從下向上尋找 2,用遞迴,從上往下尋找 下面是我的2 include include include...

HDU 1754 簡單線段樹

題意如下 給你從1到n 每個學生的成績。有m個操作,操作分為兩種,一種是查詢q x y 查詢從x學生到y學生的最高分數 另一種就是u x y 將學生x的成績改為y 一道明顯的線段樹題目 過程也是比較明確,建樹 查詢最大值 更新樹.附上 include include include define m...