線段樹 P4588 線段樹用法

2022-07-30 14:00:19 字數 748 閱讀 8978

簡單來說就是使用線段樹來儲存操作步驟,因為如果直接計算的話long long會溢位,所以建立乙個【1,q】的線段樹,使用線段樹的葉子節點來表示權值,非葉子節點表示操作過程

開始的時候線段樹的葉子節點初始化為1,而非葉子節點c[k] = c[k << 1] * c[k << 1 | 1] % mod;也為1。

當開始進行操作的時候,如果是

操作1,m:就把對應序號(第幾次操作)的線段樹的葉子節點更新為m,之後遞迴更新父節點

操作2,a:就把對應m【a】的線段樹的葉子節點更新為1,之後遞迴更新父節點

也可以這麼理解:線段樹是按照時間順序建立的,這樣就可以在執行除法之前將數字改為1,乘1 相當於後面的除

#include#include

using

namespace

std;

typedef

long

long

ll;#define max 100001ll c[max

<<2], m[100001

];int

t, q, mod,a,b;

void build(int l, int r,int

k)

else

}void update(int index,ll v,int l, int r, int

k)

else

}int

main()

}}

線段樹 單點修改 區間查詢 洛谷P4588

想了半天 這個和線段樹什麼關係!最後發現我就是豬豬 害就是個板子題 把每乙個葉子節點的值賦值為1 如果第m個是1 n 就把m這個點的值變為n 如果是2 n 就把n點的值變為1 include include include include include include include includ...

線段樹 P4588 TJOI2018 數學計算

這道題目,看起來只給了乙個數,與線段樹關係不大,但是將每次的操作存起來,就相當於是點更新,段查詢 乘積 這樣就可以轉化為線段樹的問題了。對於操作1,我們可以把對應的位置修改為相應值 操作2,把當前位置,和pos的位置改為1 並維護線段樹即可 includeusing namespace std co...

洛谷4588 數學計算(線段樹)

思路妙妙妙啊。現在我們有q個葉子節點,權值為1的線段樹,對於每次1操作,相當於將第i個葉子節點的值改為val,每次2操作就是將之前某葉節點權值改為1,最後輸出根節點的權值即可。其實還算比較氵的題了。includeusing namespace std typedef long long ll con...