做這種題目呢,我們只需要分清楚每種操作的優先順序就行了。在這裡,我們規定優先順序:區間賦值》區間乘》區間加。
也沒啥好說而呀,我要咋辦= =。
記得 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 也就是線段樹上乙個節點和他父親區間最大值的差分,我們現在可以知道乙個線段樹上乙個整區間的最大值就是他到根的和。那麼我們...