ybtoj 樹上取模
阿新 • • 發佈:2020-10-26
- 看到這種需要對樹上以及子樹區間內部的樹進行操作的題目,想都不用想就是樹鏈剖分了
- 打模板已經熟悉到爆炸了,關鍵是怎麼樣在已知條件下引入新的操作
- 觀察到新操作只有一個:取mod,怎麼解決呢?
- 這一題我們得出了兩個經驗
- 在空間允許的範圍以內,一顆線段樹上面可以搭載多條資訊
- 對於節點的操作我們要注意轉化成id[x]
- 化簡的關鍵在與去除冗餘計算
- 思考取mod什麼時候是冗餘的
- 如果說一個數小於mod,那麼他就不用被取mod
- 線段樹可以儲存的資訊是區間可以進行合併的(比如眾數就不行)
- 根據上述兩個事實,我們可以得出結論:儲存區間最大值(因為很可能發生多次取mod來卡常數)
- 由此就對應出來的就是pushup的寫法就好
- 最後注意輸入輸出:想一想一個n-1和m你找了有多久
- 程式碼如下:
-
#include <stdio.h> #include <algorithm> #include <cstring> #include <cctype> #define lson k << 1 #define rson k << 1 | 1 using namespace std; typedef long long ll; const int maxn=1e5+5; int head[maxn],nex[maxn<<1],ver[maxn<<1