• 【数据结构】线段树(名次树)


    struct SegmentTree {
    #define ls (o<<1)
    #define rs (o<<1|1)
        static const int MAXN = 100000;
        int cnt[(MAXN << 2) + 5];
    
        void PushUp(int o) {
            cnt[o] = cnt[ls] + cnt[rs];
        }
    
        void Build(int o, int l, int r) {
            if(l == r)
                cnt[o] = 0;
            else {
                int m = l + r >> 1;
                Build(ls, l, m);
                Build(rs, m + 1, r);
                PushUp(o);
            }
        }
    
        //修改值为p的元素的个数,增量为v,且不能为负
        void Update(int o, int l, int r, int p, int v) {
            if(l == r) {
                cnt[o] += v;
                if(cnt[o] < 0)
                    cnt[o] = 0;
                return;
            } else {
                int m = l + r >> 1;
                if(p <= m)
                    Update(ls, l, m, p, v);
                if(p >= m + 1)
                    Update(rs, m + 1, r, p, v);
                PushUp(o);
            }
        }
    
        //查询<=x的元素的个数
        int GetRank(int o, int l, int r, int x) {
            if(r <= x) {
                return cnt[o];
            } else {
                int m = l + r >> 1;
                if(x <= m)
                    return GetRank(ls, l, m, x);
                else
                    return cnt[ls] + GetRank(rs, m + 1, r, x);
            }
        }
    
        //查询最小的x,使得<=x的元素个数>=rk
        int GetValue(int o, int l, int r, int rk) {
            if(l == r) {
                return l;
            } else {
                int m = l + r >> 1;
                if(cnt[ls] >= rk)
                    return GetValue(ls, l, m, rk);
                else
                    return GetValue(rs, m + 1, r, rk - cnt[ls]);
            }
        }
    #undef ls
    #undef rs
    } st;
    
  • 相关阅读:
    012.Nginx负载均衡
    011.Nginx防盗链
    010.Nginx正反代理
    009.Nginx缓存配置
    附007.Docker全系列大总结
    附024.Kubernetes全系列大总结
    008.Nginx静态资源
    007.Nginx虚拟主机
    006.Nginx访问控制
    005.Nginx配置下载站点
  • 原文地址:https://www.cnblogs.com/purinliang/p/14265151.html
Copyright © 2020-2023  润新知