多校A層衝刺NOIP2024模擬賽16
T1 四捨五入
簽到題
注意到一個數是否會入上去只和其剩餘繫有關,即滿足 \(i\mod j<\frac{1}{2}j\),會入上去,考慮列舉 j 的倍數,其貢獻就成了一個區間,差分即可。
時間複雜度是調和級數的,為 \(O(n\ln n)\)。
T2 填算符
貪心,特殊性質
顯然將所有 \(\&\) 放在最左端一定不劣(不管是考慮前多少),考慮在此基礎上調整即可。
具體的可以貪心調整最右邊一個,即將最右邊的從最右端往左移,第一個合法的即使其所在位置,然後由於是 \(\&\) 操作,他的貢獻會與前邊的掛鉤,找到它獨一無二的貢獻,作為下一個合法的判斷即可。
時間複雜度為 \(O(n\log n)\)。
T3 道路修建
基環樹,換根DP,樹上問題,樹鏈剖分,線段樹,倍增
發現加邊操作後的答案一定會包含原樹的答案,而新加的答案為所有經過所加邊的路徑。
所以可以先 \(O(n)\) DP,算出原樹的答案,然後考慮新增邊的貢獻。
考慮套路,計算路徑長度的和轉化為每一條邊的貢獻(經過的次數)。
由於是基環樹,可以先考慮環上的邊的貢獻。
這一部分可以分為新加邊和原樹邊。
-
新加邊
顯然經過其的次數為總路徑的個數,考慮計算總路徑的個數。路徑只有兩個端點,而現在又欽定了必須經過新加邊,而且有路徑點不交的限制,所以只要選出兩個點則能對應唯一的路徑。即就是 \(\binom{n}{2}\),但此時算入了兩個點都在同一個子樹的貢獻,減掉即可。
記為 \(tot=\binom{n}{2}-\sum_{v\in circle}\binom{siz_v}{2}\) -
原樹邊
顯然能求出不經過的次數(相對於當前所加邊而言),即邊兩邊聯通塊的大小之積,記為 \(g_i\),則經過的次數就為 \(tot-g_i\)
所以環上邊的貢獻為 \((dis_{u,v}+1)tot-\sum_{v\in circle}g_v\)
再考慮子樹(環上的子樹)的貢獻
- 記 \(f_i=\sum_{v\in subtree_i}dis_{i,v}\),則一個子樹的貢獻為 \(f_i(n-siz_i)\)
所以總貢獻為 \((dis_{u,v}+1)tot-\sum_{v\in circle}g_v+\sum_{v\in circle}f_v(n-siz_v)\)
現在考慮怎麼快速求出 \(\sum_{v\in circle}\binom{siz_v}{2},\sum_{v\in circle}g_v,\sum_{v\in circle}f_v(n-siz_v)\) 這三個部分,分別記為 \(res1,res2,res3\)。
-
\(res1\)
直接維護的難點在於 \(siz\) 在變(因為定義的是環上的子樹),所以可以考慮樹剖 \(siz\) 只維護所有的輕兒子的貢獻,這樣除了鏈底需要特殊處理,其他的能直接維護線上段樹上。還需特殊處理 \(lca_{u,v}\),記 \(tot_i=\sum_{j=1}^ndis_{i,j}\) (不同與前面的 \(tot\)),所以得換根 DP 求出 \(tot\) 陣列。 -
\(res2\)
每個點套路維護其父向邊的 \(g\) 陣列,樹剖即可。 -
\(res3\)
類似 \(res1\)
總時間複雜度為 \(O(n\log^2n)\)。
可以倍增,這樣就能最佳化掉一支 \(\log\)
T4 逆序圖
不會,但是可以講講結論
結論:逆序對的關聯關係不會是巢狀狀的,即關聯關係會構成一段區間,並且這一段區間的值是連續的
證明考慮反證法,即嘗試用 \(4\) 個值構造出一個巢狀狀的關聯關係,發現由於單調性顯然是不行的。