题目描述
给出有 n 个元素的由小到大的序列,请你编程找出某元素第一次出现的位置。(n<=10^6)
输入
第一行:一个整数,表示由小到大序列元素个数;下面 n 行,每行一个整数;最后一行一个整数 x,表示待查找的元素;
输出
如果 x 在序列中,则输出 x 第一次出现的位置,否则输出-1。
样例输入
5 3 5 6 6 7 6
样例输出
3
基本的二分查找。
代码:
#include<cstdio>
using namespace std;
int n,p[1000010],s,ss;
int fd(int fn)
{
int i=1,j=n,m,fs=-1;
while(i<=j)
{
m=(i+j)>>1;
if(p[m]>=fn)
{
fs=m;
j=m-1;
}
else
{
i=m+1;
}
}
return fs;
}
int main()
{
scanf("%d",&n);
for(int i=1;i<=n;i++)
{
scanf("%d",&p[i]);
}
scanf("%d",&s);
ss=fd(s);
printf("%d",ss);
}