小豆現在有乙個數 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對於 20% 的資料, 1≤q≤500 ;201016
42504
84
對於 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 正...