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