【查位置】
int a[100];
//x为查找目标
int search(int l,int r,int x)//查找元素的角标
{
while(l<=r)
{int m=(l+r)/2;
if(a[m]==x){while(a[m]==a[m-1]){m--;} return m;}//返回重复元素的第一个
else if(a[m]>x){r=m-1;} //改为m++则返回重复元素的最后一个
else if(a[m]<x){l=m+1;}
}
return -1;//找不到
}
【查左最接近目标数的数】(左是升序)
ll zuo_search(ll l,ll r,ll x)///【左接近】
{ ll t=r;//复刻右边界
while(l<=r){
ll m=(l+r)/2;
if((m==t&&a[m]<x)||(a[m+1]>=x&&a[m]<x)) return a[m];
else if(a[m]>=x) r=m-1;
else l=m+1;
}
return S;//查不到用负无穷破坏它
}