二分 第一个点wa,最后一个TLE
查看原帖
二分 第一个点wa,最后一个TLE
682390
quliannanyishou楼主2022/4/13 19:28
#include<bits/stdc++.h>
using namespace std;
int a[1000002]={0},b,c,k,o;
int s,e,m;
int main()
{
    cin>>b>>c;
    for(int i=1;i<=b;i++)
    {
        scanf("%d",&a[i]);
    }
    for(int j=0;j<c;j++)
    {
        scanf("%d",&k);
    	s=1;
    	e=b;
    	while(true)
    	{
    		if(s>e)
    		{
    		    cout<<-1<<" ";
    		    break;
    		}
    		m=(s+e)/2;
            if(k==a[m])
            {
                o=1;
                while(a[m-o]==a[m])
                {
                    o++;
                }
                cout<<m-o+1<<" ";
                break;
            }
            else if(k<a[m])
            {
                e=m-1;
            }
            else if(k>a[m])
            {
                s=m+1;
            }
    	}
    }
    return 0;
}
2022/4/13 19:28
加载中...