線段樹 P4588 TJOI2018 數學計算

2021-10-08 17:07:13 字數 584 閱讀 6022

這道題目,看起來只給了乙個數,與線段樹關係不大,但是將每次的操作存起來,就相當於是點更新,段查詢(乘積),這樣就可以轉化為線段樹的問題了。

對於操作1,我們可以把對應的位置修改為相應值;操作2,把當前位置,和pos的位置改為1 並維護線段樹即可

**

#includeusing namespace std;

const int maxn=100000;

int t,q,mod;

long long mul[maxn<<2];

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

void change(int now,int l,int r,int x,int val)

int mid=(l+r)>>1;

if(x<=mid) change(now<<1,l,mid,x,val);

else change(now<<1|1,mid+1,r,x,val);

mul[now]=(mul[now<<1]*mul[now<<1|1])%mod;

}int main()

} return 0;

}

線段樹 P4588 線段樹用法

簡單來說就是使用線段樹來儲存操作步驟,因為如果直接計算的話long long會溢位,所以建立乙個 1,q 的線段樹,使用線段樹的葉子節點來表示權值,非葉子節點表示操作過程 開始的時候線段樹的葉子節點初始化為1,而非葉子節點c k c k 1 c k 1 1 mod 也為1。當開始進行操作的時候,如果...

P4588 TJOI2018 數學計算

說實話第一眼沒看出來這是個線段樹題 仔細一想就算是你把每次操作計算出來,每次除去找數,然後除掉,那樣就只能最 後取mod,或求很多逆元,不取模你會炸 longlong。如何解決?我們以時間為軸,建立線段樹,葉子結點維護該操作時間的乘數,非葉子結點維護 區間乘,葉子結點一開始都為 1 然後每次乘,進行...

洛谷 P4588 TJOI2018 數學計算

小豆現在有乙個數x xx,初始值為1 11.小豆有q qq次操作,操作有兩種型別 一共有t tt組輸入 t 5 t leq 5 t 5 對於每一組輸入,第一行是兩個數字q,m od q 100000,m od 1000000000 q,mod q leq 100000,mod leq 1000000...