Binary Search
Java
int mask=1,ans=0;
while(mask<max)mask<<=1;
while(mask>0) {
if(ans+mask<max && function(ans+mask)>=0)ans|=mask;
mask>>=1;
}
int mask=1,ans=0;
while(mask<max)mask<<=1;
while(mask>0) {
if(ans+mask<max && function(ans+mask)>=0)ans|=mask;
mask>>=1;
}