关于set中的lower_bound和algorithm头文件中的lower_bound时间复杂度区别
前情
今天做江苏省赛中的I题时,在二分查找中的check函数里,我用了如下形式
auto res=lower_bound(nums.begin(),nums.end(),k-a[i]);
然而却tle了,后来看了题解,题解用的如下形式
auto res=nums.lower_bound(k-a[i]);
总结
set 自带的 lower_bound 和 upper_bound 的时间复杂度为 O(logn)。
但使用 algorithm 库中的 lower_bound 和 upper_bound 函数对 set 中的元素进行查询,时间复杂度为 0(n)。
对于可随机访问的有序容器使用 algorithm 库中的 lower_bound 和 upper_bound 函数时间复杂度为O(logn),
但对于set,multiset这种不能随机访问的有序容器,要用其自带的 lower_bound 和 upper_bound 的时间复杂度才为 O(logn)。