博客园 首页 私信博主 显示目录 隐藏目录 管理 动画

求区间内第一个大于等于x的数的下标

int tree[4*N];
void build(int o,int l,int r) {
    if(l==r) {cin>>tree[o];return;}
    build(ls,l,mid);
    build(rs,mid+1,r);
    tree[o] = max(tree[ls],tree[rs]);
}
int get(int o, int l, int r, int x) {
    if (l == r) return l;
    return tree[ls] > x ? get(ls, l, mid, x) : get(rs, mid+1, r, x);
}
int query(int o, int l, int r, int ql, int qr, int x) { //查询[ql,qr]内第一个大于x的数的位置
    if (qr < l || r < ql) return -1;
    if (ql <= l && r <= qr) return tree[o] > x ? get(o, l, r, x) : -1;
    int t = query(ls, l, mid, ql, qr, x);
    return t != -1 ? t : query(rs, mid+1, r, ql, qr, x);
}

 

posted @ 2019-08-23 21:22  GUET_uzi  阅读(407)  评论(0编辑  收藏  举报

- 创建于 2018年9月1日

这是一位ACM爱好者&数学爱好者的个人站,内容主要是算法&数据结构&数学研究的技术文章,大部分来自学习,部分来源于网络,希望对大家有所帮助。