首页 > 代码库 > lower_bound不能乱用。。血的教训!
lower_bound不能乱用。。血的教训!
之前写了一题本应用Splay维护单点修改,查询最小的不小于它的那个数排在哪个位置。
我偷了下懒,用STL做。。。结果TLE了。。。
我们使用这段短短的代码进行测试:
#include <cstdio>#include <set>using namespace std;set <int> g;int n;int main() { freopen("s.in","r",stdin); freopen("s.out","w",stdout); scanf("%d", &n); g.clear(); for (int i=1;i<=n;i++) g.insert(i); for (int i=1;i<=n;i++) printf("%d\n", *lower_bound(g.begin(), g.end(), i)); return 0;}
我们尝试n = 10000的测试数据,用时2.71s。
我们尝试n = 50000的测试数据,用时64.25s。
我们去掉lower_bound试试?
尝试n = 10000的测试数据,用时0.01s。
尝试n = 50000的测试数据,用时0.1s。
看来在STL set里用lower_bound效率是n^2的。
看来。。我还是得认认真真地写Splay。。。
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。