Ynoi
P4688 [Ynoi2016] 掉進(jìn)兔子洞
序列,靜態(tài),求三個(gè)區(qū)間的可重集的交的大小,離線,\(n,Q\le 10^5\),3s,500MB
缺乏性質(zhì) \(\rightarrow\) bitset
靜態(tài)區(qū)間 \(\rightarrow\) 莫隊(duì)化為單點(diǎn)改
bitset 支持取交,\(x\) 重復(fù) \(cnt_x\) 次即可,空間 \(O(n^2/w)\),時(shí)間 \(O(n\sqrt n+{n^2\over w})\),分三次處理減小空間常數(shù)
P4690 [Ynoi2016] 鏡中的昆蟲
序列,區(qū)間賦值,區(qū)間數(shù)顏色,離線,\(n,Q\le 10^5\),1s,64MB
數(shù)顏色 \(\rightarrow\) 維護(hù) pre
珂朵莉樹 \(\rightarrow\) pre 只改變 \(O(Q)\) 次
轉(zhuǎn)化:?jiǎn)吸c(diǎn)改 pre,查詢 \([l,r]\) 內(nèi) pre 小于 \(l\) 的數(shù)量
- 樹套樹,在線,空間 \(O(n\log n)\),時(shí)間 \(O(n\log^2 n)\),過不去
- CDQ,離線,空間 \(O(n)\),時(shí)間 \(O(n\log^2 n)\),正解
P5064 [Ynoi2014] 等這場(chǎng)戰(zhàn)爭(zhēng)結(jié)束之后
圖,動(dòng)態(tài)加邊,回退到某歷史版本,查詢某個(gè)連通塊中權(quán)值第 \(k\) 小,離線。\(n,Q\le 10^5\),500ms,20MB
回退歷史版本 & 可離線 \(\rightarrow\) dfs 操作樹轉(zhuǎn)為撤銷
第 \(k\) 小 & 可合并 \(\rightarrow\) 值域分塊 或 bitset
-
值域分塊
值域每 \(B\) 個(gè)分成一塊,按塊離線,記錄每個(gè)連通塊點(diǎn)數(shù)。
- 合并、撤銷連通塊:暴力 \(O({n^2\over B}\log n)\),注意到并查集操作對(duì)每個(gè)值域塊相同,預(yù)處理可 \(O(n^2/B)\)。
- 查詢連通塊第 \(k\) 小:
- 枚舉值域內(nèi)每個(gè)數(shù)判斷,\(O(nB\log n)\)。
- 每個(gè)并查集開桶,\(O(nB)\),空間 \(O(nB)\),\(B\) 需要開很小。
- 使用鏈表維護(hù),可以是有序鏈表歸并(難寫)或每次把鏈表所有數(shù)拿出來
nth_element,\(O(nB)\)。
總時(shí)間復(fù)雜度 \(O(n\sqrt{n\log n})\) 或 \(O(n\sqrt{n})\),空間線性。
-
bitset壓位查詢
bitset可直接 \(O(n/w)\)。不能開 \(n\) 個(gè)
bitset\(\rightarrow\) 對(duì)于點(diǎn)數(shù)小于 \(n/w\) 的連通塊用鏈表維護(hù),同時(shí)至多存在 \(w\) 個(gè)bitset,空間線性。鏈表查詢,合并同上。鏈表并入
bitset可啟發(fā)式暴力。總時(shí)間復(fù)雜度 \(O(n^2/w)\),空間線性。
P5354 [Ynoi2017] 由乃的 OJ
樹,每個(gè)點(diǎn)的效果為 \(\operatorname{and}/\operatorname{or}/\operatorname{xor}\) 一個(gè)數(shù),單點(diǎn)改,詢問 \([0,z]\) 中所有數(shù)經(jīng)過路徑操作得到的最大值,無需離線。\(n,Q\le 10^5\),值域 \(2^{64}\),250ms,128MB。
二進(jìn)制操作 \(\rightarrow\) 拆位
二進(jìn)制復(fù)合 \(\rightarrow\) 壓位處理復(fù)合矩陣,同時(shí)處理 \(k\) 位的復(fù)合,\(O(k)\rightarrow O(1)\)
總時(shí)間復(fù)雜度 \(O(n\log^2n+nk)\)
P6109 [Ynoi2009] rprmq1
二維平面,先修改后查詢,矩形加,矩形求 \(\max\)。\(n\le 5\times 10^4,Q\le 5\times 10^5\),4s,512MB。
矩陣 \(\rightarrow\) 將一維時(shí)間化,離線問題轉(zhuǎn)為在線問題
修改,詢問在一段時(shí)間區(qū)間生效 \(\rightarrow\) 貓樹轉(zhuǎn)為對(duì)一段后綴有效(即修改后無需撤銷,詢問等價(jià)于查歷史信息和)
區(qū)間加歷史最值即可,時(shí)間復(fù)雜度 \(O(n\log^2n+Q\log n)\)
P6780 [Ynoi2009] pmrllcsrms
序列,單點(diǎn)改,求區(qū)間長(zhǎng)度不超過 \(c\) 的最大字段和,其中 \(c\) 為全局定值,無需離線。\(n,Q\le 10^6\),6s,512MB。
長(zhǎng)度不超過 \(c\) \(\rightarrow\) 每 \(c\) 個(gè)位置分一塊,詢問分為每塊內(nèi)全部或兩相鄰塊之間
相鄰塊后前綴長(zhǎng)度和不超過 \(c\) \(\rightarrow\) 直角三角形模式,分成一個(gè)矩形和兩個(gè)小直角三角形
時(shí)間復(fù)雜度 \(O(n\log n)\)
P6783 [Ynoi2008] rrusq
二維平面,\(n\) 個(gè)帶權(quán)點(diǎn),\(m\) 個(gè)矩形,\(Q\) 次詢問區(qū)間 \([l,r]\) 內(nèi)的矩形并中點(diǎn)權(quán)之和,離線。\(n,m\le 10^5,Q\le 10^6\),4s,128MB。
靜態(tài)區(qū)間,難以增量 \(\rightarrow\) 掃右維護(hù)左
點(diǎn)出現(xiàn)在區(qū)間并中 \(\rightarrow\) 掃右端點(diǎn),維護(hù)每個(gè)點(diǎn)最后出現(xiàn)時(shí)間
KD-Tree,每次暴力收回子樹內(nèi)的出現(xiàn)時(shí)間 tag 即可
詢問使用 \(O(1)-O(\sqrt n)\) 的數(shù)組維護(hù)
時(shí)間復(fù)雜度 \(O(n\sqrt Q+Q\sqrt n)\)
P7446 [Ynoi2007] rfplca
序列,區(qū)間減,詢問 \(fa\) 數(shù)組形成的樹上某兩個(gè)點(diǎn)的 LCA,無需離線。\(n,Q\le 4\times 10^5\),保證 \(fa_i<i\),2.5s,64MB。
形式奇怪 \(\rightarrow\) 考慮分塊
詢問 LCA \(\rightarrow\) 不斷跳 \(fa\)
不斷進(jìn)行重復(fù)操作 \(\rightarrow\) 記錄每個(gè)點(diǎn)跳出塊后的第一個(gè)位置
散塊直接重構(gòu),整塊 \(\sqrt n\) 次后全部出塊,直接打 tag,詢問 trivial,時(shí)間復(fù)雜度 \(O(n\sqrt n)\)
P7447 [Ynoi2007] rgxsxrs
序列,區(qū)間大于 \(x\) 的數(shù)減 \(x\),區(qū)間和與最小最大值,無需離線。\(n,Q\le 5\times 10^5,a_i\le 10^9\),6s,64MB。
和值域有關(guān) \(\rightarrow\) 值域倍增分塊(?)
- 塊大于 \(x\),打標(biāo)記或降塊,降塊至多 \(\log V\) 次,產(chǎn)生 \(\log n\) 的復(fù)雜度后必然降塊
- 塊等于 \(x\),暴力找到所有需要減小的 \(a_i\),單個(gè) \(a_i\) 同塊內(nèi)至多減小 \(b\) 次(\(b\) 為倍增底數(shù))
時(shí)間復(fù)雜度 \(O(nb\log_bV\log n)\)??臻g底層分塊后線性。
P7722 [Ynoi2007] tmpq
三個(gè)序列 \(a,b,c\),單點(diǎn)改 \(a\),詢問有幾個(gè) \(i<j<k\le r\) 滿足 \(b_{a_i}=a_j=c_{a_k}\),離線。\(n\le 2\times 10^5,Q\le 5\times 10^4\),4s,64MB。
陰間條件 \(\rightarrow\) 單點(diǎn)改 \(a,b,c\),詢問 \(b_i=a_j=c_k\)
顏色相關(guān) \(\rightarrow\) 次數(shù)大小分治,小者暴力,大者維護(hù)
小顏色暴力重新 dp,\(O(Q\sqrt n)\) 次區(qū)間加,\(O(Q)\) 次單點(diǎn)查
大顏色維護(hù)動(dòng)態(tài) dp,分塊維護(hù)塊內(nèi)前綴 dp 結(jié)果及前綴塊 dp 結(jié)果,單點(diǎn)改 \(O(\sqrt n)\),查詢 前綴塊+塊內(nèi)前綴=\(O(1)\)
總時(shí)間復(fù)雜度 \(O(Q\sqrt n)\),空間離線做到線性
P7880 [Ynoi2006] rldcot
樹,邊帶權(quán)(可以為負(fù)),靜態(tài),\(Q\) 次詢問 \([l,r]\) 內(nèi)的點(diǎn)對(duì)有幾種不同的 \(\operatorname{lca}\) 帶權(quán)深度,離線。注意不保證 \(fa_i\le i\)。\(n\le 10^5,Q\le 5\times 10^5\),500ms,512MB。
合法子區(qū)間計(jì)數(shù) \(\rightarrow\) 考慮有用點(diǎn)對(duì)
樹上有用點(diǎn)對(duì) \(\rightarrow\) 重剖,由輕子樹合并上來,有用點(diǎn)對(duì) \(O(n\log n)\) 對(duì)
問題轉(zhuǎn)化為給定 \(O(n\log n)\) 對(duì)帶權(quán)點(diǎn)對(duì),求區(qū)間內(nèi)存在哪些權(quán)值。
靜態(tài)區(qū)間問題 \(\rightarrow\) 掃右維護(hù)左,轉(zhuǎn)為在線問題
給前綴放上一個(gè)顏色,求單點(diǎn)顏色數(shù),樹狀數(shù)組即可。時(shí)間復(fù)雜度 \(O(n\log^2 n+Q\log n)\)。
P7881 [Ynoi2006] rmpq
二維平面,抽象信息類,半平面乘,單點(diǎn)查,強(qiáng)制在線。\(Q\le 10^5,x_i,y_i\le 10^9\),操作次數(shù) \(2\times 10^7\),2s,512MB。
無法 KD-Tree(值域過大且無法離線)。
很想離線(?)\(\rightarrow\) 根號(hào)重構(gòu)。
問題變成預(yù)處理 \(B\) 次修改后每個(gè)位置的答案。
發(fā)現(xiàn)易于用 \(O(k^2)\) 的時(shí)間合并兩個(gè)大小為 \(k\) 的子問題,所以遞歸兩個(gè)子問題就可以做到 \(O(B^2)\) 處理。
總時(shí)間復(fù)雜度 \(O(nB+{n^2\over B})=O(n\sqrt n)\)。
總結(jié)
- 上一篇: ThreadLocal真的会造成内存泄漏
- 下一篇: 选择远程办公,选择放弃远程办公