Jak zmodyfikować tę funkcję, aby wyszukiwała i zwracała index ostatniego szukanego elementu w tablicy?

int bsfirst(int arr[], int x, int size){
    int left = 0;
    int right = size -1;
    int mid;
    while(right>=left){
        mid = (left+right)/2;
        if(arr[mid]<x) left=mid +1;
        else right=mid-1;
    }
    if(left<size && arr[left]==x) return left;
            return -1;
    }

moja propozycja jest taka: 

int bslast(int arr[], int x, int size){
    int l = 0;
    int r = size -1;
    int mid;
    int i=0;

    while(r>=l){
        mid = (l+r)/2;
        if(arr[mid]>x) r=mid-1;
        else l=mid+1;

    }
    if(r>0 && arr[r]==x) return r;
    else return -1;
    }

Czy jest to dobre roziwązanie? Właściwie to niejasny jest dla mnnie, czy poprawny jest warunek, w ostatniej instrukcji warunkowej mojej funkcji, że r>0 - o ten mi chodzi: if(r>0 && arr[r]==x) return r;

Czy da się jakoś prościej? Tak, by modyfikacje kodu były jak najmniejsze? Próbowałem zmieniać tylko nierównośći w pętli while i zwracać wartość jako left, ale wtedy to r wskazywał szukany index, a nie left...