1. 程式人生 > 其它 >May Cook-Off 2021 Division 1

May Cook-Off 2021 Division 1

May Cook-Off 2021 Division 1

Double Burgers

Permutation Swaps

\((i,p_i)\) 連邊,維護每個環即可(略)

Falling Zero

簡單地用棧維護一個從根到葉子的dp即可(略)

Product Mex Queries

先進行一些分析。假設區間中只有質數的次冪,質數 \(p\) 能拼出次冪的指數的 \(mex\)\(W_p\),那麼答案為 \(\min\{p^{W_P}\}\)。既然答案是質數的次冪,那麼加入不是質數次冪的數,顯然於事無補,由此得到結論:有用的數只有質數的次冪。

答案的寬鬆上界為第 \(n+1\) 個質數,那麼我們維護每一種質數能拼出哪些指數,由於答案有上界,指數的上界為 \(\log V\)

方案Ⅰ:直接使用回滾莫隊,用 \(bitset\) 維護可行性,用 \(\_Find\_first()\) 函式快速計算 \(mex\) 值,若用 \(set\) 維護答案多出 \(\log\),可改用分塊平衡去掉,複雜度 \(O(\frac{n\sqrt{n}\log V}{w}+n\sqrt{V})\)\(\sqrt{V}\) 似乎有些大了,但其實可能的答案只有 \(\le V\) 的質數次冪,數量略多於 \(n\),把這些可能值離散後再分塊複雜度為 \(O(\frac{n\sqrt{n}\log V}{w}+n\sqrt{n})\)

方案Ⅱ:將 \(R\) 從左往右移動,記錄 \(f_R(x)\)

表示右端點在 \(R\),至少要區間 \([f_R(x),R]\) 才能拼出 \(x\)。考慮加入 \(R+1\),若 \(A_{R+1}\) 不是質數的冪次就別管,否則假設 \(A_{R+1}=p^k\),我們只要更新 \(p^c\)\(f_{R+1}(p^k·p^c)=min(f_R(p^k·p^c),f_R(p^c))\),別忘了更新 \(f_{R+1}(p^k)=R+1\)。然後用線段樹維護 \(f_R\) 的區間最值,線上段樹上二分即可得到答案。複雜度 \(O(n\log^2V/n\log n\log V)\)

XOR maximum-minimum matrices

\(2^n\)

列舉用了那些行,我們只需要每列的最小值和最大值,問題轉化到序列上了。對於最小值和最大值分別維護一個單調棧,每次加入/刪除的時候 \(O(1)\) 計算答案的變化量。假設選了 \(cnt\) 行,那麼序列上的一種方案世紀對應 \((n-cnt+1)·cnt!·(n-cnt)!\) 種,乘上去就好了。要先離散化預處理。複雜度 \(O(nm(\log (nm)+2^n))\)