本來打算把大白書第三章一口氣攻下來的,但是這個線段樹也是卡了好久。
不敢過題太快,怕自己走馬觀花到頭來結果什麼都不會。
可也不能再拖了,在做題中也許有更多的體會。
模板一:
1 l r v 表示區間[l, r]所有元素都加上v
2 l r 表示查詢區間[l, r]的sum, min, max
sumv[o]的定義為:如果只執行節點o及其子孫節點的中的add操作,節點o對應區間中所有數之和
1**君模板二://線段樹區間修改2//
1 l r v 表示區間[l, r]所有元素都加上v3//
2 l r 表示查詢區間[l, r]的sum, min, max4//
sumv[o]的定義為:如果只執行節點o及其子孫節點的中的add操作,節點o對應區間中所有數之和
5 #include 6 #include 7 #include 8
using
namespace
std;910
const
int maxnode = 1
<< 17;11
12int
_sum, _min, _max, op, ql, qr, v;
1314
struct
intervaltree
1528
if(addv[o]) 29}
3031
void update(int o, int l, int
r)32
41maintain(o, l, r);42}
4344
void query(int o, int l, int r, int
add)
4552
else
5358}59
}tree;
6061
const
int inf = 1000000000;62
63int
main()
6473
else
7479}80
}8182return0;
83 }
線段樹區間修改set
1 l r v 表示將區間[l, r]全部賦值為v (v >= 0)
2 l r 表示查詢區間[l, r]的sum, min, max
1**君//線段樹區間修改set2//
1 l r v 表示將區間[l, r]全部賦值為v (v >= 0)3//
2 l r 表示查詢區間[l, r]的sum, min, max
4 #include 5 #include 6 #include 7
using
namespace
std;89
const
int maxnode = 1
<< 17;10
11int
_sum, _min, _max, op, ql, qr, v;
1213
struct
intervaltree
1427
if(setv[o] >= 0) 28}
2930
//標記傳遞
31void pushdown(int o, int l, int
r)3239}
4041
void update(int o, int l, int
r)42
52maintain(o, l, r);53}
5455
void query(int o, int l, int
r)56
63else
if(ql <= l && r <=qr)
64
69else
70 75}
76}tree;
7778
const
int inf = 1000000000;79
80int
main()
8192
else
9398}99
}100
101return0;
102 }
模板 線段樹(區間修改)
1 include 2 include 3 include 4 include 5 include 6 using namespace std 7const int maxn 100000 10 8 9 update a dd 把a l a r 的值全部加v add 10 update s et 把...
模板 線段樹 區間修改
與上篇線段樹一起食用效果更佳 神奇線段樹 點選收穫幸福 一開始當然是暴力!會超時的否掉 不用暴力的話。就用 結合 了解吧。我不想畫圖。先建樹 建樹 void build tree int x,int y,int p int mid x y 2 build tree x,mid,p 2 build t...
線段樹 區間求和模板 (區間修改)
include include include include include include include include include define mem a memset a,0,sizeof a define mem2 a memset a,1,sizeof a define mod ...