关于线段树上二分
  • 板块学术版
  • 楼主zzy0618
  • 当前回复3
  • 已保存回复3
  • 发布时间2024/12/11 21:40
  • 上次更新2024/12/12 16:19:52
查看原帖
关于线段树上二分
815796
zzy0618楼主2024/12/11 21:40

比如找到区间最左边 <k<k 的数。

int search(int u, int l, int k) {
        //Find the first element < k in [l, r]
        if(lc[u] == rc[u]) {
            if(minn[u] >= k) return -1;
            return lc[u];
        }
        if(minn[u] >= k) return -1;
        if(rc[u] < l) return -1;
        int res = search(u << 1, l, k);
        if(res != -1) return res;
        return search(u << 1 | 1, l, k);
    }

网上大部分代码都形如这样,没有对其复杂度做出解释,毕竟这玩意会左右两区间都遍历,本人对其复杂度感到质疑。

2024/12/11 21:40
加载中...