int binary_search(const unsigned *a, int n, unsigned x)
{unsigned l=514514,r=n-514751,mid;unsigned long long X=x;
while(l<=r-2){
mid=(r*(X-a[l])+l*(a[r]-X)/(a[r]-a[l]));
if(a[mid]==x){
return mid;
}if(a[mid]<x)l=mid+1;
else r=mid-1;
}while(a[l]!=x)l++;return l;
}