#r. 【模板】二分(二)
【模板】二分(二)
该比赛已结束,您无法在比赛模式下递交该题目。您可以点击“在题库中打开”以普通模式查看和递交本题。
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
4
2
-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; }