TJOI2018 數學計算 線段樹

2022-04-29 22:21:15 字數 1240 閱讀 8779

~~~題面~~~

題解:,,,考場上看到這題,沒想到竟然是省選原題qaq,考場上把它當數學題想了好久,因為不知道怎麼處理有些數沒有逆元的問題。。。。知道這是線段樹後恍然大悟。

首先可以一開始就建出乙個長度為n的操作序列,初始值都是1,表示一開始預設是1乘上n個1,因為乘1也就相當於沒乘。

對於操作1,直接將操作序列上對應的位置單點修改為給定值,維護區間乘積。

對於操作2,將序列上對應位置單點修改為1.

查詢直接查詢線段樹的根即可。

1 #include2

using

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

view code

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次操作所乘的數 保證...