線段樹模板

2022-05-19 01:54:51 字數 2002 閱讀 9148

基礎線段樹模板:

1 #include2 #include

3 #include4

using

namespace

std;56

const

int maxn=200005;7

8int val[maxn+1];9

10struct

node

11tree[maxn*3];//

開三倍就夠了

1617

int get_max(int x,int

y)18

2425

int creat(int root,int left,int right)//

根節點和根節點的左右區間

2642

43int calculate(int root,int left,int

right)

4456

57int update(int root,int pos,int value)//

更新表面上看起來只是更新乙個點,實際是更新的該店的所有的父節點

5871

72int

main()

7382 creat(1,1

,n);

83char

s;84

inta,b;

85while(m--)

8695}96

return0;

97 }

view code

更新區間值模板(將某個區間全部更新為乙個值)

**:

1 #include2 #include

3 #include4

using

namespace

std;56

const

int maxn=100005;7

8//int val[maxn+1];910

struct

node

11tree[maxn*3];//

開三倍就夠了

1718

int creat(int root,int left,int right)//

根節點和根節點的左右區間

1936

37void update_mark(int

root)

3847 tree[root].mark=0;48

}49}50

51int calculate(int root,int left,int

right)

5260

inta,b;

61 a=calculate(root<<1

,left,right);

62 b=calculate((root<<1)+1

,left,right);

63return a+b;//

向上一層返回得到的處理值64}

6566

int update(int root,int left,int right,int value)//

更新表面上看起來只是更新乙個點,實際是更新的該店的所有的父節點

6776

inta,b;

77 a=update(root<<1

,left,right,value);

78 b=update((root<<1)+1

,left,right,value);

7980

return tree[root].total=a+b;//

更新該節點的最新處理值81}

8283

intmain()

84100 printf("

case %d: the total value of the hook is %d.\n

",kase,calculate(1,1

,n));

101}

102return0;

103 }

view code

線段樹模板(模板)

參考部落格 持續更新。外鏈轉存失敗,源站可能有防盜煉機制,建議將儲存下來直接上傳 img xhrgdjcd 1613976863463 區間儲存在陣列中的下標對應為 12 3 4 5 6 7 8 9 10 11 12 13 14 15 四部分單點更新 根據題目的要求編寫自己的pushup,query...

線段樹模板

include include include using namespace std const int size 10010 struct node the node of line tree class linetree void updatem void updateline public ...

線段樹模板

單點更新,區間求最值 include include include include include define n 222222 using namespace std int num n struct tree tree n 4 void push up int root void build...