關於C++ STL中對於set使用lower_bound進行二分查找的效率問題


在做一道題目的時候需要對C++的set進行二分查找,於是自然而然的使用了std::upper_bound,然而結果是在第36個測試點超時了,改了一天嘗試了各種卡常剪枝均沒有效果,最后即將要與標程逐字符一致的時候突然發現過了,原因就是標程用的是set自帶的upper_bound函數。上網查閱資料發現對set直接用std的upper_bound效率極低,原因有可能是set不支持按照下標訪問,於是單次查詢的時間復雜度退化至\(O(n)\),對於3e5的數據規模直接爆炸。現在想起來天梯賽的時候也是因為這個原因導致一個題一直超時..綜上,使用set的時候應該選擇set自己的二分函數。

set<int, greater<int> > st;
set<int>::iterator it = st.upper_bound(x);//在降序排列的set中查找第一個小於x的元素並返回其迭代器


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM