如果採取暴力的做法,那麼乘起來會炸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 輸出...