вот есть вполне лёгкий для подкорки взгляд
l,r=1,n
while(l<=r){
m=l+(r-l)/2;
sign(cmp(key,v[m])):
-1:r=m-1;
0:return m;
1:l=m+1;
}
return "-1 /что по мнению Степанова не культурно"
l,r=0,n //0..n-1;n is after end of seq
while(l<r){
m=l+(r-l)/2
sign(cmp(key,v[m])):
-1:r=m
0: а вот тут r=m или l=m+1 ?????
1:l=m+1;
}
return r
второй случай ещё и усугублён использованием бинарного if(толи меньше , толи меньши или равно) вместо тернарного(арифметического выбора)
собственно вопрос как культурно переходить из 1 варианта ( с поправкой что инвариант r- смотрит после последнего) в безбажный второй - где выбор между 2мя ветками.