int binary_search(const unsigned *a, int n, unsigned x)
{unsigned l=514514,r=n-514751,mid;
while(l<=r-2){
mid=((unsigned long long)r*(x-a[l])+(unsigned long long)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;
}