【模板】二分(二)
该比赛已结束,您无法在比赛模式下递交该题目。您可以点击“在题库中打开”以普通模式查看和递交本题。
Description
给出有 n 个元素的由小到大的序列,有q次询问,对于每次询问,请你编程找出某元素第一次出现的位置。(n<=10^5,q<=10^5)Input Format
第一行两个整数n,q
第二行n个整数组成的有重复元素的有序序列(从小到大)
接下来q行,每行一个x,表示要查找的数
Output Format
x在序列中第一次出现的位置
如果没有找到则输出-1
5 2
1 3 3 5 8
3
42
-1
Hint
#include <cstdio>
#include <iostream>
using namespace std;
int arr[1000005],n,k;
int main()
{
scanf("%d",&n);
for(int i=1;i<=n;i++)
scanf("%d",&arr[i]);
scanf("%d",&k);
int left=1,right=n,mid;
while(____(1)_____)
{
mid=(left+right)/2;
if(k<=arr[mid])
______(2)_______;
else
______(3)_______;
}
if(____(4)_____)
cout<<left;
else
cout<<-1;
}