Tjoi2018 數學計算

2022-03-19 21:09:35 字數 961 閱讀 1182

bzoj

luogu

線段樹分治

是不是想問為什麼不暴力做?

模數沒說是質數,所以不一定有逆元.

然後就是要每次build一下把線段樹權值init成1,

博豬不知道為什麼for就wa,build就過了(用re自動機查了下,發現還是有0...)

for(int i=1;i<=(_<<1);i++)s[i]=1;
#define ls x<<1,l,mid

#define rs x<<1|1,mid+1,r

#includeusing namespace std;

const int _=1e5+5;

int re()

while(ch>='0'&&ch<='9')x=x*10+ch-'0',ch=getchar();

return x*w;

}int t,p,q;

int val[_],ed[_],s[_<<2];

void mul(int&x,int y)

void bu(int x,int l,int r)

void upd(int x,int l,int r,int ql,int qr,int v)int mid=(l+r)>>1;

if(ql<=mid)upd(ls,ql,qr,v);if(qr>mid)upd(rs,ql,qr,v);

}void solve(int x,int l,int r,int v)

int mid=(l+r)>>1;solve(ls,v);solve(rs,v);

}int main()

bu(1,1,q);

for(int i=1;i<=q;i++)if(ed[i])upd(1,1,q,i,ed[i],val[i]);

solve(1,1,q,1);

} return 0;

}

TJOI2018 數學計算

如果採取暴力的做法,那麼乘起來會炸longlong,除非寫個高精。再考慮乘一下逆元呢,顯然也不行,模數不一定為質數。這道題的關鍵點在於這句話,對於每乙個型別1的操作至多會被除一次 這句話的最基本的告訴了我們每次得到的答案一定是乙個整數 其次,這句話保證了可以應用線段樹解決這個問題 如果除的操作可能會...

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 輸出...