در این سوال شما بایستی توابع lower_bound و upper_bound را پیاده سازی کنید. فرض کنید قرار است شما این توابع را روی آرایهی مرتب شده شده از عناصری از یک تایپ به نام C اجرا کنید. در ضمن فرض کنید تابع bool f(C a, C b) وجود دارد که در صورتیکه a<b، به عنوان خروجی true و
در غیر اینصورت false برمیگرداند. شما بایستی تابع
C *lower_bound(C *first, C *last, C key)
را بنویسید. این تابع مشابه تابع lower_bound عادی در بازهی first تا last به دنبال key میگردد.
برای مقایسهی عناصر از تابع f استفاده میکند و اشارهگر به عنصری که پیدا میکند را بعنوان
خروجی برمیگرداند. در ضمن اگر بین first و last تعداد $n$ عنصر از تایپ C وجود داشته باشد این تابع باید در زمان ${\cal O}(\log{n})$ اجرا
شود. به طور مشابه تابع C *upper_bound(C *first, C *last, C key) را بنویسید.
راهنمایی: اگر f(a,b) برابر false باشد و f(b,a) هم false باشد میتوان نتیجه گرفت a=b است.
نکته: اگر نمیتوانید سوال بالا را حل کنید:
همین توابع را برای int lower_bound(int l, int r, int key) و int uppper\_bound(int l, int r, int key) بنویسید منتهی
با این تفاوت که این توابع در آرایهی مرتّب شده a که global و از نوع int است به دنبال key میگردند و اندیس خانهای که پیدا میکنند
را بعنوان خروجی برمیگردانند.