線段樹 HDU 1698 區間set,區間查詢

2021-08-31 19:09:29 字數 1139 閱讀 7260

就是ba區間的每乙個值都變成某個數。

//poj 3468 區間add,區間查詢

#include#include#includeusing namespace std;

//每當有add加到i節點上,不會去更新i節點的sum.

//也就是說如果要查詢區間[1,n]的sum值,既要考慮sum[i]的值,也要考慮add[i]的值

const int maxn=100000+100;

typedef long long ll;

#define lson i*2,l,m

#define rson i*2+1,m+1,r

int sum[maxn*4];

int addv[maxn*4];

//i節點收集下面節點的資訊

void pushup(int i,int num)

//將i節點的addv壓下去,且更新sum[i]

void pushdown(int i,int num)}

//sum[i]收集子節點的資訊

//只在build線段樹時會用

void pushup(int i)

void build(int i,int l,int r)

int m=(l+r)/2;

build(lson);

build(rson);

pushup(i,r-l+1);}

//給[ql,qr]區間加上add值

void update(int ql,int qr,int add,int i,int l,int r)

pushdown(i,r-l+1);

int m=(l+r)/2;

if(ql<=m) update(ql,qr,add,lson);

if(mpushup(i,r-l+1);}

//查詢[ql,qr]區間的sum值

int query(int ql,int qr,int i,int l,int r)

pushdown(i,r-l+1);

int m=(l+r)/2;

int res=0;

if(ql<=m) res+=query(ql,qr,lson);

if(mreturn res;

}

HDU 1698 《線段樹,區間set

題目連線 題意 一條長為n的銅鍊子,每個結點的價值為1。有兩種修改,l,r,z z 2 表示把 l,r 區間內鍊子改為銀質,價值為2.z 3 表示把 l,r 區間內鍊子改為金質,價值為3.線段樹,區間重設,求和。include include using namespace std const in...

hdu1698 區間改變 lazy線段樹

include using namespace std const int maxn 100010 struct nodetree maxn 4 int a maxn 4 void pushdown int id,int date 只往下push一層 tree id 1 sum date tree ...

hdu 1698 區間更新

基礎題 初學 include include using namespace std define lson l m rt 1 define rson m 1 r rt 1 1 const int maxn 101000 int h w n int col maxn 2 標記是否當前節點梗係 int...