二分查找

// 查找 a 数组的 [head, tail] 单调序列中 t 第一次出现的位置
int query(const int &t, int head, int tail){
    while(head <= tail){
        int mid = (head + tail) >> 1;
        if(t > a[mid])head = mid + 1;
        if(t < a[mid])tail = mid - 1;
        if(t == a[mid])tail = mid;
        if(head >= tail && a[mid] == t)return mid;
    }
    return -1;      // -1 表示未找到
}
原文地址:https://www.cnblogs.com/mojibake/p/15145594.html