數學計算 LibreOJ 2573 線段樹

2022-01-10 18:16:30 字數 1661 閱讀 2045

小豆現在有乙個數 x ,初始值為 1 。 小豆有 q 次操作,操作有兩種型別:

1 m: x=x×m ,輸出 xmodm ;

2 pos: x=x/ 第 pos 次操作所乘的數(保證第 pos 次操作一定為型別 1,對於每乙個型別 1 的操作至多會被除一次),輸出 xmodm 。

一共有 t 組輸入。

對於每一組輸入,第一行是兩個數字 q,m 。

接下來 q 行,每一行為操作型別 op ,操作編號或所乘的數字 m (保證所有的輸入都是合法的)。

對於每乙個操作,輸出一行,包含操作執行後的 xmodm 的值

樣例輸入

1

10 1000000000

1 22 1

1 21 10

2 32 4

1 61 7

1 12

2 7

樣例輸入

212

201016

42504

84

對於 20% 的資料, 1≤q≤500 ;

對於 100% 的資料, 1≤q≤105,t≤5,m≤109 。

這道題最簡單的做法應該就是線段樹了

對於第i次操作

如果是操作1,我們將編號為i的節點乘m,維護乙個單點修改,最後輸出區間乘積

如果是操作2,我們把編號為i的節點的權值改為1可以了,因為每乙個節點只會修改一次,同樣是輸出區間乘積

#includeusing namespace std;

typedef long long ll;

const int maxn=1e5+5;

ll m,mod,q;

struct tretr[maxn<<2];

void push_up(ll da)

void build(ll da,ll le,ll ri)

ll mids=(le+ri)>>1;

build(da<<1,le,mids);

build(da<<1|1,mids+1,ri);

push_up(da);

}void gai(ll da,ll bh,ll w)

ll mids=(tr[da].l+tr[da].r)>>1;

if(bh<=mids) gai(da<<1,bh,w);

else gai(da<<1|1,bh,w);

push_up(da);

}void gai2(ll da,ll bh,ll w)

ll mids=(tr[da].l+tr[da].r)>>1;

if(bh<=mids) gai(da<<1,bh,w);

else gai(da<<1|1,bh,w);

push_up(da);

}ll qh(ll da,ll le,ll ri)

ll ans=1;

ll mids=(tr[da].l+tr[da].r)>>1;

if(le<=mids) ans=ans*qh(da<<1,le,ri)%mod;

if(ri>mids) ans=ans*qh(da<<1|1,le,ri)%mod;

return ans%mod;

}int main() else }}

return 0;

}

python 數學計算

加法 減法 乘法 冪次 除法 取整,商的整數部分 取餘 位與 位或 位異或 位翻轉 x x 1 左移 右移 3 5 加法 8 10 6 減法 4 3 4 乘法 12 2 5 冪次 2的5次方 32 10 6 除法 1.6666666666666667 10 6 取整,商的整數部分 1 10 6 取餘...

數學計算庫

我的書 京東購買鏈結 購買鏈結 噹噹購買鏈結 寫演算法的實現,離不開各種矩陣以及線性代數的運算,包括矩陣求逆,矩陣分解,svd以及特徵值,特徵向量等 music方法使用特徵空間法估計訊號 自關矩陣 的成分。自相關矩陣的特徵值對應的不同特徵向量是正交的 現在的深度學習方法也是在找若干組正交基的過程 特...

Shell 數學計算

shell中的賦值和操作預設都是字串處理,在此記下shell中進行數 算的幾個特殊方法,以後用到的時候可以來看,呵呵 1 錯誤方法舉例 a var 1 1 echo var 輸出的結果是1 1,悲劇,呵呵 b var 1 var var 1 echo var 輸出結果是1 1,依然悲劇,呵呵 2 正...