線段樹,類似區間樹,它在各個節點儲存一條線段(陣列中的一段子陣列),主要用於高效解決連續區間的動態查詢問題,由於二叉結構的特性,它基本能保持每個操作的複雜度為o(logn)
'>o(logn)
o(logn)。
1const
int inf = 0x3f3f3f3f;2
const
int maxn = 50010;3
int a[maxn],ans[maxn<<2],lazy[maxn<<2];4
//a為原序列資訊,ans模擬線段樹維護區間和,lazy為懶惰標記
5int mx[maxn<<2],mn[maxn<<2];6
//mx區間最大值 mn區間最小值
1void pushup(int
rt)2
1void build(int l,int r,int
rt)2
8int mid = (l+r)>>1
;9 build(l,mid,rt<<1
);10 build(mid+1,r,rt<<1|1
);11
pushup(rt);
12 }
1void pushdown(int rt,int ln,int
rn) 2//
ln表示左子樹元素結點個數,rn表示右子樹結點個數
316 }
1void add(int l,int c,int l,int r,int
rt)2
8int mid = (l+r) >> 1
;9 pushdown(rt,mid-l+1,r-mid); //
若既有點更新又有區間更新,需要這句話
10//
什麼叫既有點更新又有區間更新???
11if(l <=mid)
12 add(l,c,l,mid,rt<<1
);13
else
14 add(l,c,mid+1,r,rt<<1|1
);15
pushup(rt);
16 }
1void update(int l,int r,int c,int l,int r,int
rt)2
11int mid = (l+r)>>1
;12 pushdown(rt,mid-l+1,r-mid);
13if(l <=mid)
14 update(l,r,c,l,mid,rt<<1
);15
if(r >mid)
16 update(l,r,c,mid+1,r,rt<<1|1
);17
pushup(rt);
18 }
1 ll query(int l,int r,int l,int r,int建樹brt)2
9int mid = (l+r)>>1
;10 pushdown(rt,mid-l+1,r-mid); //
若更新只有點更新,不需要這句
11 ll ans = 0;12
//ll max = 0;
13//
ll min = inf;
14if(l <=mid)
1520
if(r >mid)
2126
//return max;
27//
return min;
28return
ans;
29 }
uild
(1,n
,1);
'>bui
ld(1
,n,1
);'>build(1,n,1);
build(1,n,1);
點更新add
(l,c
,1,n
,1);
'>add(l,c,1,n,1);
add(l,c,1,n,1);
區間修改up
date
(l,r
,c,1
,n,1
);'>update(l,r,c,1,n,1);
update(l,r,c,1,n,1);
區間查詢ll
'>ll
ll ans
=que
ry(l
,r,1
,n,1
);'>ans=query(l,r,1,n,1);
ans=query(l,r,1,n,1);
若只涉及點更新 只需用(1)(2)(4)(6)
若只涉及區間更新 需用(1)(2)(3)(5)(6)
若兩種更新都有 則在所有向子區間查詢或更新前 都需pushdown()
hdu I hate it 區間最大值 線段樹
include define maxn 200001 define lson l,mid,rt 1 define rson mid 1,r,rt 1 1 int max maxn 2 int n,m int max int a,int b void pushup int rt 要理解好更新的定義,不...
線段樹 區間修改 最大值
最大值 區間修改 總時間限制 10000ms 單個測試點時間限制 1000ms 記憶體限制 65536kb 描述 在n 1 n 100000 個數a1 an組成的序列上進行m 1 m 100000 次操作,操作有兩種 1 1 lr c 表示把a l 到a r 增加c c的絕對值不超過10000 2 ...
數列區間最大值 線段樹
acwing 1270 time limit 2s memory limit 64mb problem description 輸入一串數字,給你 m 個詢問,每次詢問就給你兩個數字 x,y要求你說出 x 到 y 這段區間內的最大數。input output 輸出共 m 行,每行輸出乙個數。samp...