[問題] 關於 set 的效率問題

作者: nevikw39 (牧)   2019-01-04 00:50:41
如題,近來在高中生解題系統上練習 apcs 的題目。目前正卡關於 b966 線段覆蓋長度。
https://zerojudge.tw/ShowProblem?problemid=b966
現在的狀況是 na score 70%,前兩筆測資分別 11 , 10 ms,最後一組測資 tle 。據此,
我推論問題應該在乎效率的部分。
https://pastebin.com/n5YqVnR7
我的想法是讀入各端點後將範圍內的點都放入 set 中,再計算 set 內元素總個數。
進一步測試,發現當 a = 1, b = 999999 可以在 1 秒內算出,但當 b = 9999999 時竟
然要花到 6 秒。
因此,請教各位,根據這個做法,有沒有改善的空間?unordered_set 在插入的過程中,為
什麼時間會落差如此之大?
作者: yvb   2019-01-04 04:20:00
問題不是set沒效率, 而是你內層for那段太沒效率.當b值放大10倍, 你的內層for當然也做了10倍時間.
作者: idiont (supertroller)   2019-01-04 04:34:00
當前作法改善的空間 就是直接用bool陣列取代set但是因為內層for太沒效率 還是會TLE可以先排序每個線段 然後直接對區間做處理 而非每個點
作者: ilikekotomi (Young)   2019-01-04 05:44:00
比空間的話vector<bool>比bool陣列還好但要先看一下說明因為vector<bool>比較特殊
作者: s06i06 (三條魚)   2019-01-04 18:34:00
簡化版的skyline algorithmNlog(N),N是input線段數

Links booklink

Contact Us: admin [ a t ] ucptt.com