~~~題面~~~
題解:,,,考場上看到這題,沒想到竟然是省選原題qaq,考場上把它當數學題想了好久,因為不知道怎麼處理有些數沒有逆元的問題。。。。知道這是線段樹後恍然大悟。
首先可以一開始就建出乙個長度為n的操作序列,初始值都是1,表示一開始預設是1乘上n個1,因為乘1也就相當於沒乘。
對於操作1,直接將操作序列上對應的位置單點修改為給定值,維護區間乘積。
對於操作2,將序列上對應位置單點修改為1.
查詢直接查詢線段樹的根即可。
1 #include2view codeusing
namespace
std;
3#define r register int
4#define ac 401000
5#define ll long long67
intn, p, w, go, t;
8int
l[ac], r[ac];
9ll tree[ac];
1011 inline int
read()
1218
19void
pre()
2023
24void update(int
x)25
2829
void build(int x, int ll, int
rr)30
37int mid = (ll + rr) >> 1
;38 build(x * 2
, ll, mid);
39 build(x * 2 + 1, mid + 1
, rr);
40update(x);41}
4243
void change(int
x)44
50int mid = (l[x] + r[x]) >> 1;51
if(go <= mid) change(x * 2
);52
else change(x * 2 + 1
);53
update(x);54}
5556
void
work()
5772
else
7377 printf("
%lld\n
", tree[1
]);78}79
}80}81
82int
main()
83
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 輸出...
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次操作所乘的數 保證...