lower_bound函数详解 挑战程序设计P66

来源:互联网 发布:长期住宾馆怎么知乎 编辑:程序博客网 时间:2024/06/08 10:48

(挑战程序设计P66)

lower_bound这个STL函数,从已安排好的序列a中利用二分搜索找出指向满足ai >= k的ai的最小指针。类似的函数还有upper_bound,这一函数求出的是指向满足ai > k的ai的最小指针。

如下图所示:

图片来源


用这两个函数可以很快的求出长度为n的有序数组a中k的个数:

num = upper_bound(a, a+n, k) - lower_bound(a, a+h, k);

在求最长上升子序列问题中,用lower_bound会使代码更高效:

int dp[N];void solve(){    fill(dp, dp+n, INF);    for(int i = 0; i < n; i++)        *lower_bound(dp, dp+n, a[i]) = a[i];//在dp中找到大于等于a[i]的最小指针,也就是找到第一个a[i]    printf("%d\n", lower_bound(dp, dp+n, INF) - dp);//找到第一个INF的指针,减去头地址就是上升序列的长度}



原创粉丝点击