模板 線段樹 區間修改

2022-09-17 23:33:21 字數 2228 閱讀 9397

與上篇線段樹一起食用效果更佳:神奇線段樹(點選收穫幸福)

一開始當然是暴力!(會超時的否掉)不用暴力的話。。就用

(結合**了解吧。。我不想畫圖。。。)

先建樹

//

建樹 void build_tree(int x,int y,int

p)

int mid=(x+y)/2

; build_tree(x,mid,p*2

); build_tree(mid+1,y,p*2+1

); tree[p].maxx=max(tree[p*2].maxx,tree[p*2+1].maxx);//

求最大值

}

區間修改

//

區間修改

void putdown(int

p)void changeplus(int x,int y,int p,int

v)

int mid=(tree[p].a+tree[p].b)/2

;

if(y<=tree[p*2

].b)

changeplus(x,mid,p*2

,v);

if(x>=tree[p*2+1

].a)

changeplus(mid+1,y,p*2+1

,v);

tree[p].maxx=max(tree[p*2].maxx,tree[p*2+1].maxx);//

簡單二分

}

void changeplus(int x,int y,int p,int

v)

if(tree[p].lazy)

}

查詢區間最大值

//

查詢最大值

int ask(int x,int y,int

p)

看道題吧(點選收穫rp++)

冥想ing。。。

ac**:

(調了兩天。。終於。。)

#include#include

using

namespace

std;

struct

nodetree[

4000004

];int a[500005

];long

long

intans;

//建樹

void build_tree(int x,int y,int

p)

int mid=(x+y)/2

; build_tree(x,mid,p*2

); build_tree(mid+1,y,p*2+1

); tree[p].maxx=tree[p*2].maxx+tree[p*2+1

].maxx;

} //

區間修改

void putdown(int

p)void changeplus(int x,int y,int p,int

v)

if(tree[p].lazy)

putdown(p);

//遇到標記就下放

int mid=(tree[p].a+tree[p].b)/2

;

if(x<=mid&&y>=tree[p*2].a )changeplus(x,y,p*2

,v);

if(y>mid&&x<=tree[p*2+1].b)changeplus(x,y,p*2+1

,v);

tree[p].maxx=tree[p*2].maxx+tree[p*2+1

].maxx;

} void ask(int x,int y,int

p)

if(y<=tree[p*2

].b)

ask(x,y,p*2

);

if(x>=tree[p*2+1

].a)

ask(x,y,p*2+1);}

intmain()

build_tree(

1,n,1

);

for(int i=1;i<=m;i++)

else

}return0;

}

(rp++!!)

線段樹區間修改模板

本來打算把大白書第三章一口氣攻下來的,但是這個線段樹也是卡了好久。不敢過題太快,怕自己走馬觀花到頭來結果什麼都不會。可也不能再拖了,在做題中也許有更多的體會。模板一 1 l r v 表示區間 l,r 所有元素都加上v 2 l r 表示查詢區間 l,r 的sum,min,max sumv o 的定義為...

模板 線段樹(區間修改)

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 把...

線段樹 區間求和模板 (區間修改)

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 ...