divide et impera
1. @range is not necessary - there is just information of minimum and maximum.
2. If your @ports are sorted, imagine for a while that 100th item is wanted result. It means that 99th item has value 50098 and 100th item is greater than 50099. Check the half index of your range. If it is greater than expected value, seek left side, else seek right side. Seeking left xor right side, it is same problem, but amount of items is half.