線段樹多種操作模板(區間加,區間乘,區間賦值)

2021-09-26 09:49:56 字數 1117 閱讀 8589

做這種題目呢,我們只需要分清楚每種操作的優先順序就行了。在這裡,我們規定優先順序:區間賦值》區間乘》區間加。

也沒啥好說而呀,我要咋辦= =。

記得 que

ry

query

quer

y 和 upd

at

eupdate

update

時要 標記下飯(放就行了。

放**吧。

#include #define ll long long

#define lson l, m, rt<<1

#define rson m+1, r, rt<<1|1

#define n 100005

using namespace std;

int sum[n * 4], add[n * 4], col[n * 4], mul[n * 4];

void pushup(int rt)

void pushdown(int rt, int x)

if(mul[rt] != 1)

if(add[rt])

}void build(int l, int r, int rt)

int m = l + r >> 1;

build(lson);

build(rson);

pushup(rt);

}void update(int l, int r, int rt, int a, int b, int c, int o)

else if(o == 2)

else

return;

} pushdown(rt, r-l+1);

int m = l + r >> 1;

if(a <= m) update(lson, a, b, c, o);

if(b > m) update(rson, a, b, c, o);

pushup(rt);

}int query(int l, int r, int rt, int a, int b)

int main()

build(1, n, 1);

while(m--)

} return 0;

}

線段樹 區間加區間乘

給出序列 a1,a2,an 0 ai 109 有關序列的四種操作 1.al,al 1,ar 1 l r n 加上 x 103 x 103 2.al,al 1,ar 1 l r n 乘上 x 103 x 103 3.al,al 1,ar 1 l r n 變成 x al,x al 1 x ar 103 ...

線段樹動態開點區間加區間求和

陝西師範大學第七屆程式設計競賽網路同步賽 h.萬惡的柯怡 保證葉子節點被完整的覆蓋,需要開節點,就把左右兒子都開出來,其餘和普通線段樹一樣。用結構體內部函式,記憶體不足,第一次遇見本地問題不嚴重 不明嚼慄?include typedef long long ll const int n 400001...

ZKW線段樹區間加區間取最值

本來以為是和zkw單點修改之類的簡單技巧,但是今天卡常的時候學習了一下發現有點離譜。rx tr x trx 表示max f ax max x max max maxfax maxx 也就是線段樹上乙個節點和他父親區間最大值的差分,我們現在可以知道乙個線段樹上乙個整區間的最大值就是他到根的和。那麼我們...