題目描述
Haruna
每天都會給提督做早餐! 這天她發現早飯的食材被調皮的Shimakaze
放到了一棵
樹上,每個結點都有一樣食材,Shimakaze
要考驗一下她。
每個食材都有一個美味度,Shimakaze
會進行兩種操作:
1、修改某個結點的食材的美味度;
2、對於某條鏈,詢問這條鏈的美味度集合中,最小的未出現的自然數是多少。即 值。
請你幫幫Haruna
吧。
題解
這裏補一下帶修莫隊和樹上莫隊的坑。
如果這題放在序列上的話,即求一段區間的 值的話,那就可以帶修莫隊+對數字分塊即可做到 。於是補一下帶修莫隊。
帶修莫隊就是具有單點修改和區間詢問的莫隊,具體來說就是將詢問設有三個關鍵字: 所在的塊, 所在的塊,上一個修改的時間點,按照這個順序來排序。然後每次詢問的時候再維護 指針表示進行了幾個修改操作即可。簡略證明一下複雜度:設塊的大小爲 ,修改次數爲 ,詢問次數爲 ,則對於 指針來說,最壞移動 次,對於 指針來說,最壞移動 次 (怎麼感覺在寫物理) ,對於 指針來說,最壞移動 ,每次修改都是 ,於是複雜度爲 。一般題目不會說 大小姑且當做 ,然後一般 ,於是爲 ,當 取 時最優爲 。
所以我們不妨考慮一下怎麼在樹上莫隊。
如何把一個序列表示成一棵樹呢? 序?no,這裏是一種特殊的歐拉序,它是當訪問到一個點的時候加入序列中,當它的子樹都訪問完的時候再加一次,所以這個序列總共有 個點(即樹上每個節點都會被加入兩次)。然後我們設 表示 的初始和結束兩個位置。
對於詢問 ,設 ,於是我們分討一下:
1.若 是 的祖先,那對於 這段區間來說,只有 這條鏈上的點會被加入一次,剩下的點都會被加入兩次,所以我們只要維護一次的點即可。
2.若 不是 的祖先,則 ,那對於 這段區間來說, 這條鏈上只有 沒有被加入,剩下的點都被加入一次,其它點都被加入兩次,所以特判一下 即可。
這樣就完成了樹上莫隊啦!效率爲 。
代碼正在碼中,反正bzoj掛了(其實我想先交上作業)