int gmax(register int a,register int b){return a>b?a:b;}
int gmin(register int a,register int b){return a<b?a:b;}
int binary_search(unsigned *a,int n,register unsigned x)
{
int p=1ll*n*x/a[n-1],lim=4;
for(;a[gmax(p-lim,0)]>x||x>a[gmin(p+lim,n-1)];lim<<=2);
register int l=gmax(p-lim,0),r=gmin(p+lim,n-1);
do
{
register int mid=(l+r)>>1;
a[mid]<x?l=mid+1:r=mid;
}
while(l!=r);
return l;
}