Just a Hook(區間修改)

2021-10-03 16:07:34 字數 1455 閱讀 8037

hdu 1689

題意:給定序列,預設值為1。m次操作,每次操作把區間 [x,y] 的值改為 z,

求操作完序列的和。

標籤:區間修改

分析: 模板題,但是注意多組輸入資料,每次要重置 lazy tag

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#define inf 0x3f3f3f3f

#define pi acos(-1)

using

namespace std;

typedef

long

long ll;

typedef pair p;

const

int mod=

1e9+7;

const

int maxn=

2e5+10;

struct node tree[maxn<<2]

;ll n,m;

void

push_up

(ll p)

void

push_down

(ll p)

}void

build

(ll p, ll l, ll r)

ll m=

(l+r)

>>1;

build

(p<<

1,l,m)

,build

((p<<1)

|1,m+1

,r);

push_up

(p);

}void

update

(ll p, ll x, ll y, ll z)

push_down

(p);

ll m=

(tree[p]

.l+tree[p]

.r)>>1;

if(x<=m)

update

(p<<

1,x,y,z);if

(y>m)

update

((p<<1)

|1,x,y,z)

;push_up

(p);

}ll query

(ll p, ll x, ll y)

intmain()

cout<<

"case "

<<<

": the total value of the hook is "

<<

query(1

,1,n)<<

"."<}return0;

}

區間修改 區間查詢模板

如題,已知乙個數列,你需要進行下面兩種操作 1.將某區間每乙個數加上x 2.求出某區間每乙個數的和 第一行包含兩個整數n m,分別表示該數列數字的個數和操作的總個數。第二行包含n個用空格分隔的整數,其中第i個數字表示數列第i項的初始值。接下來m行每行包含3或4個整數,表示乙個操作,具體如下 操作1 ...

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

題目傳送門 just a hook t組資料 每組有乙個長度為n的序列,給你m次操作,每次操作給你x,y,z三個數,操作 將x到y的數字變為z m次操作完成後求序列的總和 很明顯的線段樹題目,維護區間和即可 注意一下更新區間的方法即可 對於修改不能直接更新到底部,要成段更新 include usin...

樹狀陣列區間修改

有時,我們要支援區間修改,區間查詢。線段樹可以做到。但是樹狀陣列更好寫。1d的情況 設 b i a i a i 1 則 a i b 1 b i a 1 a l b 1 b 1 b 2 b 1 b l a 1 a l l b 1 l 1 b 2 b l sum l i 1 b i 如果我們維護 b i...