We all know that we can also use **sort function** for a specific portion of a vector. Eg: let a vector be v = {24, 11, 5, 7, 6} , now if we want to sort only last three elements, we can write **sort(v.begin()+2,v.end())** Likewise, I thought we can also use **lower_bound(v.begin()+2,v.end(),6)** to find the lower_bound for 6 in the last three elements. But that's not working. May i please know where I'm going wrong . It seems the **lower_bound and upper_bound functions** only work for the whole vector despite our attempts & wants. Please correct me if I'm wrong.

How is it "not working"? Show some code, expected output and actual output.

For what it's worth, lower_bound and upper_bound don't care whether or not they are getting the full range. So it's almost certainly an error in your usage.

{5, 7, 6} is not sorted.

Yah,i did it intentionally. But now i realise that i didn't understand lower_bound at all, i thought when the vector is not sorted, the output would be the first element which is

greater or equalto the passed value.I expected the output for this will be 24. But the output is 7. Can you help me with this.

lower_bound is binary search, so you get garbage output if vector is not sorted.

oh my god...i didn't know that lower_bound is binary search, thank you so much! All my doubts are now clarified :)

Just curious: how did you assume

`lower_bound`

worked? That too in`O(logn)`

time?My bad....thanks