題目描述
因為我在學校做過類似的題,所以這題一眼秒了
這題我們首先會想到乘法逆元,但發現不太可做。
這時我們仔細考慮平衡樹,發現我們可以按照操作得到乙個陣列。最後通過線段樹查詢所有數的乘積。
對於操作1,我們可以將陣列第i
ii個數由1變為xxx
對於操作2,我們可以將陣列第i
ii個數的值變為1
輸出的話,甚至連線段樹的que
ry
query
quer
y函式都不用寫,直接輸出根節點的值就可以了
# include
using
namespace std;
const
int n =
2e5+10;
const
int inf = int_max;
#define ll long long
#define for(i,a,b) for(int i = a;i <= b;i++)
#define _for(i,a,b) for(int i = a;i >= b;i--)
template
<
typename t>
void
read
(t &x)
ll t[n *4]
;int t,q,mod;
void
change
(int x,
int l,
int r,
int xx,
int yy)
//將第xx個數的值改為yy
int mid =
(l + r)
>>1;
if(xx <= mid)
change
(x <<
1,l,mid,xx,yy)
;else
change
(x <<1|
1,mid +
1,r,xx,yy)
; t[x]
= t[x <<1]
* t[x <<1|
1]% mod;
}int
main()
}return0;
}
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 數學計算 線段樹
題面 題解 考場上看到這題,沒想到竟然是省選原題qaq,考場上把它當數學題想了好久,因為不知道怎麼處理有些數沒有逆元的問題。知道這是線段樹後恍然大悟。首先可以一開始就建出乙個長度為n的操作序列,初始值都是1,表示一開始預設是1乘上n個1,因為乘1也就相當於沒乘。對於操作1,直接將操作序列上對應的位置...
TJOI2018 數學計算 線段樹水題
描述 小豆現在有乙個數 x xx,初始值為 1 11 小豆有 q qq次操作,操作有兩種型別 1 11m mm x x m x x m x x m 輸出 xmo dm x mod m xmodm 2 22p os pospo s x x x x x x 第p os pospo s次操作所乘的數 保證...