TJOI2018 數學計算

2022-02-03 04:38:12 字數 755 閱讀 9328

如果採取暴力的做法,那麼乘起來會炸longlong,除非寫個高精。

再考慮乘一下逆元呢,顯然也不行,模數不一定為質數。

這道題的關鍵點在於這句話,對於每乙個型別1的操作至多會被除一次

這句話的最基本的告訴了我們每次得到的答案一定是乙個整數

其次,這句話保證了可以應用線段樹解決這個問題

如果除的操作可能會重複,就不能再用線段樹了。

#include#include#includeconst int lqs=1e5+10;

int mod;

struct treet[lqs<<2];

#define ls rt<<1

#define rs rt<<1|1

void pushup(int rt)

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

int mid=l+r>>1;

build(ls,l,mid);

build(rs,mid+1,r);

pushup(rt);

}void modify(int rt,int x,int w)

int mid=t[rt].l+t[rt].r>>1;

if(x<=mid)modify(ls,x,w);

else modify(rs,x,w);

pushup(rt);

}int main()

} return 0;

}

Tjoi2018 數學計算

bzoj luogu 線段樹分治 是不是想問為什麼不暴力做?模數沒說是質數,所以不一定有逆元.然後就是要每次build一下把線段樹權值init成1,博豬不知道為什麼for就wa,build就過了 用re自動機查了下,發現還是有0.for int i 1 i 1 i s i 1 define ls x...

TJOI2018 數學計算(線段樹)

描述 小豆現在有乙個數 x xx 初始值為 1 11 小豆有 q qq 次操作,操作有兩種型別 1 11 m x x m x x m x x m 輸出 xxxm od modmodmm m 2 pos pospo s x x x x x x 第 pos 次操作所乘的數 保證第 pos pospo s...

TJOI2018 數學計算(線段樹)

題目描述 因為我在學校做過類似的題,所以這題一眼秒了 這題我們首先會想到乘法逆元,但發現不太可做。這時我們仔細考慮平衡樹,發現我們可以按照操作得到乙個陣列。最後通過線段樹查詢所有數的乘積。對於操作1,我們可以將陣列第i ii個數由1變為xxx 對於操作2,我們可以將陣列第i ii個數的值變為1 輸出...