Added a new function based off suave using bsearch to find upper k

... in my testing runs slower than the original decrementing k suave function (most likely due to repeated comparison of lower numbers and decrementing having better cache locality is my guess)

Also - minor change - pulled the if statement out of the for loop in the print_my_vector function, theoretically this should be faster, but the compiler may already do this.