zoukankan      html  css  js  c++  java
  • 权值线段树

    /*
     * 权值线段树
     * 仅能维护小数值数据.对于大数值数据需离散化,但会从在线数据结构退化为离线数据结构.
     * 本质上,权值线段树就是线段树的一种特殊维护
     * 
     * 权值线段树是主席树前置知识
    */
    
    /*
     * Description
     * [模板]权值线段树: 请使用权值线段树,实现以下操作
     * -1:插入数x
     * -2:删除数x
     * -3:查询当前比数x小的数的个数
     * -4:查询排名为k的数
     * 
     * 数据范围: 1 <= x <= 1e6 
    */
    
    
    #include <cstdio>
    const int N = 1e6+5;
    
    int tree[N<<2];
    void update(int l,int r,int rt,int num,int delta){ // 操作1,2
        tree[rt] += delta;
        if(l == r){
            return;
        }else{
            int mid = l+r>>1;
            if(num <= mid){
                update(l,mid,rt<<1,num,delta);
            }else{
                update(mid+1,r,rt<<1|1,num,delta);
            }
        }
    }
    
    int countlower(int l,int r,int rt,int num){
        if(r < p){
            return tree[rt];
        }else{
            int ans = 0;
            ans += rank(l,l+r>>1,rt<<1,num); // [l,mid]有多少数小于num
            if(1+(l+r>>1) < num){ // [mid+1,r] 有多少数小于num
                ans += rank(1+(l+r>>1),r,rt<<1|1,num);
            }
            return res;
        }
    }
    
    
    int kmin(int l,int r,int rt,int k){
        while(l < r){
            if(k <= tree[rt]){
                r = l+r>>1;
                rt = rt<<1;
            }else{
                l = (l+r>>1)+1;
                rt = rt<<1|1;
                k -= tree[rt<<1];
            }
        }
        return l;
    }
    
    
    
    ---- suffer now and live the rest of your life as a champion ----
  • 相关阅读:
    5.Spring常用注解
    4.@Autowired注解与@Resource注解的区别
    3.只读事务@Transactional(readOnly = true)
    2.Object...param参数
    1.private static final long serialVersionUID = 1L
    SOCKET是调用操作系统通信服务的一种机制
    HTTP头和网页分离方法

    Python split()方法
    socket (计算机专业术语)
  • 原文地址:https://www.cnblogs.com/popodynasty/p/13956201.html
Copyright © 2011-2022 走看看