THUWC 2019 第二輪 純口胡題解

2022-04-30 04:09:15 字數 2623 閱讀 7594

從這裡開始

因為各種原因,所以沒有去。在場外和神仙 jerome_wei 當嘴巴選手,開心地發現我被打爆了。

題目大意可以在 ouuan 的遊記裡檢視。

以下題解應該全是口胡的,應該有很多鍋,歡迎來 hack 或者交流做法。

6 個題,4 個大資料結構。emm..... 

聽說今年講題鴿掉了,沒進面試也有獎(

聽說是個聯賽水題,相信大家都會。

大概 lct 維護一下基環樹森林就行了。

誰愛寫誰去寫

考慮這樣乙個問題,把所有標號在 $[l, r]$ 中的點拿出來,任意兩個點之間有一條邊,距離為樹上的距離,求它們的最小生成樹,答案等於邊權大於 k 的邊數加 1。

有乙個結論是,它的最小生成樹可以通過按深度排序,每個點在排在它前面的點中找乙個距離它最近的點作為父節點的方法求出。

注意到對於每個點,考慮它和 mst 上父節點的邊什麼時候會產生貢獻。顯然存在 $l', r'$ 使得,當 $l \leqslant l'$ 或者 $r \geqslant r'$ 的時候它會產生貢獻。

考慮怎麼求解這樣一組數,注意到它們是相互獨立的,可以分開求解。

慮列舉點 $p$,計算它的 $l'$,問題是求滿足下面的條件中的點 $x$ 中最大的標號

然後這個硬做只能 $o(n\log^3 n)$。

考慮按深度排序以深度為第一關鍵字,標號為第二關鍵字,然後第三條就變成了 $dep_x \leqslant dep_p$。

考慮從小到達列舉 $p$,用動態點分維護一下資訊。考慮現在在分治中心要解決的問題,如果乙個點從分治中心的子樹內跳進來,我們需要整個分治區域的資訊,如果從分治中心子樹外跳進來,我們只用分治中心子樹的資訊。

分治中心的子樹資訊只用維護一下每個深度標號的 $max$。考慮子樹外對子樹內的資訊怎麼維護,你發現直接查詢非常困難,考慮子樹外對子樹內的影響,注意到子樹外每個點對子樹內的影響是對一段深度區間產生貢獻,這個可以線段樹維護。

對於求解 $r'$ 的過程是類似的,只不過最後一條限制變成 $dep_x > dep_p$,而不是大於等於。

剩下是個簡單掃瞄線。

時間複雜度 $o(n\log^2 n + q\log (n + q))$。

被全場打爆了,群除我人均會 t1,sad....

考慮只有 1 次操作,你需要最大化或者最小化 $s$,或者小於 0 的最大值和大於 0 的最小值。

考慮怎麼維護這樣乙個東西

最大值和最小值只用上面 4 個資訊就能轉移。

所以現在的問題是怎麼維護最後那兩個東西,乙個顯然的想法是直接維護它們,但是非常顯然它是錯的。比如小於 0 的最小值在經過某次操作後大於 0,剩下那個值也大於 0,然後就沒法轉移了。

注意到每次 $s$ 或變為 $ks + b$,當 $k\neq 0$ 的時候,$|ks|$ 的絕對值總是不減的,因此每次操作至多使得絕對值減少 15($k = 0$ 的時候非常 trivial,可以直接判掉)。因此暴力維護 $[-225, 225]$ 之間的每個狀態是否可達,以及 $> 225$ 的最小值以及 $< -255$ 的最大值就可以轉移了。

複雜度 $o(2^n n v^2)$。

聽說只記最大最小除了 sub 1 全過了。

支配樹模板題。

考慮求出每個點 $x$ 最早從哪個祖先 $f_x$ 能不經過根到它的路徑上的邊到達它。求法和求半支配點類似。只不過順序變成按從根開始依次遞迴 dfs 序較大的子樹處理。

現在考慮處理詢問,某個 $f_x$ 能夠到達的話,它的子樹內都能到。如果 $f_x$ 的深度比 $a$ 小,並且 $x$ 在 $b$ 的子樹內,那麼將 $[in_x, out_x]$ 標記為可以到達的。如果乙個在 $b$ 的子樹內點沒有被標記,那麼它一定不可達,考慮用反證法,假設 $p$ 是深度最小的不滿足條件的點,考慮從根到它的某一條路徑,最後乙個在根到 $a$ 路徑上的點 $q$,之後它不會再經過根到 $p$ 的路徑上的邊,然後我們得到了 $f_p$ 是 $q$ 的祖先,這和假設矛盾。

(原本這裡還有點東西,因為奇奇怪怪的原因,所以它消失了)

考慮一下氣泡排序 $k$ 輪候的序列怎麼快速求。依次掃瞄原序列,每掃到乙個數就把它加入堆,如果堆的大小超過 $k$ 就 pop 掉其中最小值,並把它加入答案序列,最後 $k$ 個數顯然是最大 $k$ 個數從小到大排列。

考慮當 $q = 1$ 的時候怎麼求答案,如果最後 $k$ 個數不滿足條件,答案為 0。否則考慮前面的數,每遇到乙個數,如果它不是字首最大值,只能將新加入堆的元素賦為它的值,因為堆內原來的元素都是大於當前字首 max 的,如果是字首 max,顯然隨便分配乙個堆內的數給它就行了。所以答案是 $k$ 的字首 max 個數次方。

現在考慮 $q \leqslant 5\times 10^5$ 的情形,有乙個簡單 $o(n\log^2 n + q\log n)$ 做法,考慮點分治,處理跨過分治中心的詢問。是否合法可以判斷一下最後 $k$ 個的最大值是不是最大的,以及最小值是否比鏈上剩下的數大。先處理出每個點到分治重心的單調棧內元素個數,以及最大值。維護單調棧可以在插入的時候二分一下,記錄一下被修改的元素來做到簡單可持久化。然後求剩下一半的時候在求出的單調棧上二分一下就行了。

好寫好調好想,反正常數小,時限 4s,應該能過。

要做到只帶 1 個 log 考慮一下向上走的半邊可以每個點向祖先中第乙個標號比它大的數連邊,然後倍增一下就行了。向下走可以考慮每個點有貢獻的條件,實際產生貢獻的開始位置大概也可以倍增求一下。

是湊個整齊而已,顯然這裡不會有題解

CSP S 第二輪總結

csp s第二輪總結 這真的是入門考試 滿臉疑惑,我自閉了。先說第一題,儒略日。題幹不多,也就幾十行大概這就是看題一小時,做題兩小時吧。而且最後幾組資料,100000個,年份 10 9,這是給人做的?為了這組資料,我足足試了兩個多小時,最後也不知a沒a 大體思路就是前面四年一組,到公元1600年往後...

CSP2019 S 第二輪退役記

更新提示 正文 到杭州的時候是下午,休息了一下就吃完飯了。晚上的時候閒著沒事複習了一下幾個不太熟的數論板子,mathrm mathrm mathrm 還有高斯消元,線性基什麼的,但願不考。感覺有點緊張。好早就到文淵中學了,感覺人特別多,進考場前膜拜了一下 mathrm 大佬,還從手機上看了一下 ma...

CSP2020第二輪遊記

今年csp第二輪在jz考 嘛,因為初賽去過了。就沒什麼感覺了 超大,徒步的話腳直接 廳沒有可以睡舒服的地方差評 中午起來後,就是迷迷糊糊的進入考場 然後看題之前,密碼一直不對。後來發現忘打括號心態 之後看第一題 好傢伙,等我先打個暴力 30min later 可以 年1e9 直接二分 但就是一直調。...