Uva 10474 进来学一学lower_bound

紫薯P108 例题5-1

一、题意

若干组数据。
每组第一行n、q分别表示石头数和询问数。
之后列出n个石头分别代表的数字。
之后q次询问每次一个数x,要求你输出x在这个石头序列排列后的第几个(或者找不到)。

二、解析

排序后用lower_bound

三、代码

#include <iostream>
#include <algorithm>
using namespace std;
const int maxn = 10000 + 5;
int n, q, a[maxn], kase = 1;

int main() {
    while(cin >> n >> q && (n || q)) {
        for(int i = 0; i < n; i ++) cin >> a[i];
        sort(a, a + n);
        cout << "CASE# " << kase ++ << ":\n";
        while(q --) {
            int x;
            cin >> x;
            int idx = lower_bound(a, a + n, x) - a;
            if(idx == n || a[idx] != x) cout << x << " not found" << endl;
            else cout << x << " found at " << idx + 1 << endl;
        }
    }
}

四、归纳

  • lower_bound(start, end, x)是经常用到的函数,作用是在一个排列好的序列中用二分法找到第一个>=x的数字的指针或迭代器,找不到时返回end
  • 拓展: upper_bound类似,找到的是第一个>x的位置
Re:从零开始的刷题生活 文章被收录于专栏

一起来重刷题叭~ 由于精力有限,题意只说大概,题目细节可以点击vjudge链接查看。 题目以紫薯中的Uva例题/习题为主,有时候有些比较经典的算法也会特意从其它OJ上找题,并不一定出现在紫薯上。 噢,紫薯指——《算法竞赛入门经典(第2版)》by 刘汝佳 喜欢的小伙伴点个赞呗?不然我只能认为一直只有我一个人在自娱自乐orz....

全部评论

相关推荐

菜菜狗🐶:双非之光
找工作,你会甘心进小厂还...
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务