P4588 TJOI2018 數學計算

2022-08-20 00:39:12 字數 916 閱讀 2324

說實話第一眼沒看出來這是個線段樹題

仔細一想就算是你把每次操作計算出來,每次除去找數,然後除掉,那樣就只能最

後取mod,或求很多逆元,不取模你會炸 longlong。

如何解決?

我們以時間為軸,建立線段樹,葉子結點維護該操作時間的乘數,非葉子結點維護

區間乘,葉子結點一開始都為 1

然後每次乘,進行單點修改,將該次操作時間的位置修改為該乘數,最後輸出 tr[1].

每次除的話,就將詢問的操作位置的乘數改為 1。最後輸出 tr[1]

然後這題就做完了

#include#include

#define ll long long

#define lson k<<1,l,mid

#define rson k<<1|1,mid+1,r

#define ls k<<1

#define rs k<<1|1

#define mid ((l+r)>>1)

using

namespace

std;

const

int maxn=100005

;ll tr[maxn

<<2

];int

mod,t,q;

inline

void update(int

k)void build(int k,int l,int

r)void change(int k,int l,int r,int x,int

val)

if(x<=mid)change(lson,x,val);

else

change(rson,x,val);

update(k);

}int

main()

}return0;

}

線段樹 P4588 TJOI2018 數學計算

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

洛谷 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...

洛谷P4588 TJOI2018 數學計算

題目大意 有乙個數 x 和取模的數 mod 初始為 1 有兩個操作 m x x times m 並輸出 x mod pos x x 第pos次操作乘的數 保證合法 並輸出 x mod 題解 對時間建一棵線段樹,記錄區間積就可以了 卡點 無 c code include define maxn 100...