題目傳送門
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 前乙個題因為只有最後才要輸出一段...