Just a Hook(線段樹,成段更新)

2021-10-10 01:48:18 字數 1410 閱讀 5175

題目傳送門

just a hook

t組資料

每組有乙個長度為n的序列,給你m次操作,每次操作給你x,y,z三個數,操作:將x到y的數字變為z

m次操作完成後求序列的總和

很明顯的線段樹題目,維護區間和即可

注意一下更新區間的方法即可:

對於修改不能直接更新到底部,要成段更新

#include

using namespace std;

#define debug(a) cout<<#a<<"="int n=

1e5+9;

int t, n, m, x, y ,z;

struct segtreetr[n<<2]

;inline

intread()

inline

intlc

(int p)

inline

intrc

(int p)

inline

void

push_up

(int p)

inline

void

build

(int p,

int l,

int r)

int mid=

(l+r)

>>1;

build(lc

(p), l, mid)

;build(rc

(p), mid+

1, r)

;push_up

(p);

}inline

voidf(

int p,

int k)

inline

void

push_down

(int p)

inline

void

updata

(int p,

int l,

int r,

int x,

int y,

int k)

if(tr[p]

.tag)

push_down

(p);

int mid=

(x+y)

>>1;

updata(lc

(p), l, r, x, mid, k)

;updata(rc

(p), l, r, mid+

1, y, k)

;push_up

(p);

}int

main()

printf

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

,++k, tr[1]

.sum);}

return0;

}

線段樹成段更新 MB

include include using namespace std struct node a 4 1100000 int dp 1100000 n,m long long max long long int x,long long int y void build int l,int r,in...

線段樹(單點更新and成段更新)

線段樹需要的空間。區間為1 n 假設是一棵完全二叉樹,且樹高為i。完全二叉樹性質 第i層最多有2 i 1 個結點。那麼 2 i 1 n i log2 n 1 共有 2 i 1 個結點,即 2 log2 n 1 1個結點 即2 2 log2 n 1 2 n 1 但這是建立樹是完全二叉樹的情況下。但是如...

POJ 3468 線段樹成段更新

題意就是給了一串行的數.然後不斷的問一段的值或者在一段上每個數加乙個數.輸出每次詢問的值.初看這題感覺就是最一般的線段樹成段更新的應用.但下手後發現很多細節.對於一向很粗心的我調了很久才給調出來.成段更新前一文已經提到過.這裡再通過這一題補充一些很值得注意的地方 1 前乙個題因為只有最後才要輸出一段...