隨筆.關於掃描線

當初架站風風火火,一年多來冷冷清清,轉眼已經荒廢這裡十幾快二十個月了。
為什麼我想架站?
當初我在 instagram 上開了帳號,分享一些小題目或寫題小心得,都不是什麼困難、冷僻、高深的知識,反而很多都是 well known 的。但後來沒那麼多時間寫字1,或是想分享的就那些,或是因為社交媒體的本質讓我獲得太高的關注度,開始太在意寫出來的東西如何,畏首畏尾,漸漸不寫了。那年校內賽我跌了一跤,又正逢開始準備學測的時間點,種種原因一氣之下把那個帳號廢了。
這半年接到 IOI camp 的講師工作,教基礎資結2,倒是有機會重新從頭梳理一次我對資料結構的理解。我原本就比較喜歡也比較擅長資料結構,過往一直會默默收集著關於「線段樹為什麼是二元樹、不是 $k$ 元樹?」「線段樹和樹堆差在哪?」「線段樹的懶人標記和懶人答案3的關係是什麼?」一類的想法。沒什麼特別,很多選手都能回答,知道這些也對競賽成績不會有什麼實質幫助,頂多有自娛之用。
編著講義和投影片,我寫到掃描線和離線算法,升起許多自作多情的念頭。
什麼是掃描線?
對於高維的東西,沒辦法用資料結構一口氣維護。枚舉某個維度,剩下的低維度的資料就有辦法維護了。說個例子吧,學過掃描線的都會算平面上矩形聯集面積——二維平面沒辦法一次數有幾處非零,若是枚舉一個維度,剩下一個維度變成序列,就能輕鬆用線段樹維護了。
一瞬間我想到了劉慈欣的三體4。
解題的我就像個二維人,多想掙脫 z 座標從側面一眼望盡整個平面,但是那是貪婪的。記憶體的限制讓視野被限縮在狹隘的一維序列,我只能抄寫二維平面上的一維切片,走一步抄一筆,直到我抄下了很多很多切片,我驕傲地說,我讀懂這個平面了,這片花園有 $10^{12}$ 棵樹。
你問,在座標 $(18692, 34406)$ 上那朵花,能不能畫給我看看?我兩手一攤不會了。你接連提了 $5 \times 10^5$ 個問題,我措手不及,只能逐一抄下來,回家慢慢梳理、把每個問題分門別類寫整齊,再走過一次整個平面,總算把你要的答案收集齊全了。我一股腦的說,你剛才第一個問題問了這個,答案原來是這個、第二個問題、第三個問題、第五十萬個問題。
你搖搖頭,這些答案來得不夠即時。我這麼想著。
在題目裡我太習慣把掃描線當作時間線。時間線掃過不同維度,我儘管挑最容易解題的維度,按下播放鍵,答案就會自己靠攏。現實生活也是一種時間線,時間一邊推進,我費盡力氣維護 GPA、維護競程、維護人際、維護我作為生物的生命。假如現實時間是一個維度,那些應該要做的許多件事情是另一個維度,這個世界要我們做的,就是強制在線同時維護這麼多任務,但為什麼不能枚舉另外一個維度,一次專心處理一種一輩子份量的任務?為什麼不能當個三維人,旁觀者清地一口氣看清楚未來會怎麼走?這一題,甚至沒人幫我們當 online judge。
是了,也許這個網站的任務,就是紀錄這種轉瞬即逝的一念之間。沒有學術價值、沒有教育意義,就只是某個路人半夜思緒飛蕩的隨筆。像是小孩去沙灘玩撿到貝殼,不怎麼好看、不怎麼實用、佔空間又礙眼,卻還是多想撿回家,好像這片貝殼多珍貴多稀罕。像這樣的寫下點什麼的衝動,正是我一開始執筆的契機。
所以,就讓我任性點,就把這個角落當作我的塗鴉牆吧?
後記:許願欄
希望能寫下這學期的大一上修課心得,好多人都在發,我也希望能為這半年來第一次的大學體驗留下一點紀錄。
希望能完整的重編一次基礎資結講義,把那些來不及說的、沒空間說的都說清楚。也許未來甚至還可以繼續擴編。
依然希望能寫點關於 IOI 2023 的心得,在記憶力退化以前、在回憶風化以前。