题目描述
给定一个升序数组(可能有重复)和 次询问。每次询问给出一个整数 :如果把 插进数组并保持升序,最左能插到第几个位置?(位置从 数起;等价于问:第一个 的元素排在第几位。)若所有元素都小于 ,输出 。
这正是 lower_bound 的定义:在已升序的区间里返回指向第一个 的元素的迭代器,减去 v.begin() 加一就是位置。它用二分实现,单次只要 , 次询问也扛得住。
输入格式
第一行两个整数 、()。
第二行 个整数 (升序,)。
接下来 行,每行一个整数 ()。
输出格式
行,每行一个整数:最左插入位置(从 数起);全部元素小于 时输出 。
样例
输入:
5 3
1 3 5 7 9
5
10
0
输出:
3
6
1
自己就在数组里,第一个 的正是它自己(第 3 位); 比谁都大只能排到 ; 比谁都小插在最前面。
数据范围
,数组升序。lower_bound 找「第一个 」,upper_bound 找「第一个 」——有重复元素时两者差得远,别拿错。