std::set::lower_bound与std::lower_bound的效率问题

1 篇文章 0 订阅

lower_bound是大家很常使用的函数,但是在对容器使用时,尽量使用容器本身的lower_bound / upper_bound.

std::set::lower_bound与std::lower_bound的效率问题

这个问题可能大家觉得只差那么一点点,恰恰相反,两者效率相差大的几乎是天壤之别。

在最近的cf round359(div2)的D题里,我和标程解法一模一样,但是一个是700msAC但是我的程序却是3000ms,默默的TLE。 完全不科学。

经过仔细比对,我的程序里面二分是这样的:
这里写图片描述

但是标程是这样的:
这里写图片描述

完全难以相信他俩有任何区别。
我修改之后再次将我的程序提交:
这里写图片描述

果然是这个问题!

这个问题很困扰我,cppreference网站上并没有解释。某度上也搜不到任何信息。

所以上StackOverflow上搜了一下,果然有这个问题。

这里写图片描述

WOW这个就是我想问的,下面是回答:

这里写图片描述

这里写图片描述

我倒是觉得下面那个说的很有道理,应该是set<>::iterator不支持随机访问,所以直接当作普通的序列进行二分的时候就不是O(logn)的复杂度了。

所以,一定要使用std::set::lower_bound

  • 12
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值