int upper_bound_search(int a[], int l, int r){
while(l < r){
int mid = l + r >> 1;
if(check_upper(mid)) r = mid;
else l = mid + 1;
}
return l;
}
int lower_bound_search(int a[], int l, int r){
while(l < r){
int mid = l + r + 1 >> 1;
if(check_lower(mid)) l = mid;
else r = mid - 1;
}
return l;
}



