【TIOJ 1169】氣球博覽會

原題連結:http://tioj.infor.org/problems/1169

首先要先想到第三子題怎麼做
對於每一個顏色,都開一棵線段樹
對於一個顏色K的線段樹維護:
1.從左邊開始不含K的最長區間
2.從右邊開始不含K的最長區間
3.這個區間不含K的最長區間
維護並不難想也不難寫,總複雜度O(2^cN+QlgN),空間複雜度O(2^CN)

問題在當C到24時,不管是時間還是空間都有問題
我們首先觀察到,在尚未有任何氣球的時候,對於每個顏色的線段樹長相都一樣
先把原序列當成N個的單點修改操作,這樣每個修改操作一定只會到動到lgN個線段樹的節點
那這裡就可以用動態開點的方式,如果記憶體是空的表示這個區間絕對沒有該顏色,可以直接把答案填滿,這樣也不用預處理2^cN。
至於詢問操作就照原本的寫,只要注意不要讀到空的記憶體就好了
複雜度O((N+Q)lgN),空間上如果對顏色離散化或用map會更好,不過我是直接硬開2^24個指標就是了XD

留言

這個網誌中的熱門文章

【心得文】高中資訊競賽,回顧心得文

【World Finals】2023 ICPC World Finals

【World Finals 團練紀錄】2021 ICPC World Finals