zoukankan      html  css  js  c++  java
  • 主席树的另一种写法

    代码

    //先init,然后Build_tree(hd[0],左,右),接下来Update(hd[前一个],hd[当前],左,右,数,数量)
    //可支持在线。最后可查询
    #define e tree[rt]
    #define p tree[pre]
    int hd[maxn];
    struct Tree{ int lson,rson,cnt; };
    struct CMTree
    {
       int id;
       Tree tree[maxn*40];
       void init(){ id=0; }
       void pushup(int rt){ e.cnt=tree[e.lson].cnt+tree[e.rson].cnt; }
       void Build_tree(int& rt,int le,int ri)
       {
           rt=id++;
           e.cnt=0;
           if(le==ri) return;
           int mid=(le+ri)/2;
           Build_tree(e.lson,le,mid);
           Build_tree(e.rson,mid+1,ri);
           pushup(rt);
       }
       void Update(int pre,int& rt,int le,int ri,int k,int d)
       {
           rt=id++;
           if(le==ri){ e.cnt=p.cnt+d; return; }
           int mid=(le+ri)/2;
           if(k<=mid)
           {
               Update(p.lson,e.lson,le,mid,k,d);
               e.rson=p.rson;
           }
           else
           {
               Update(p.rson,e.rson,mid+1,ri,k,d);
               e.lson=p.lson;
           }
           pushup(rt);
       }
       int Query(int rt,int le,int ri,int x,int y)
       {
           if(x<=le&&ri<=y) return e.cnt;
           int mid=(le+ri)/2;
           int ret=0;
           if(x<=mid) ret+=Query(e.lson,le,mid,x,y);
           if(y>mid)  ret+=Query(e.rson,mid+1,ri,x,y);
           return ret;
       }
    
    }CT;
    View Code
  • 相关阅读:
    转:Gerrit 学习
    list, set操作
    Dice chrone execise
    【转】terminal 快捷键
    python package list
    爬虫2
    爬虫 1
    django跨表联查传输数据到前端
    vue实现鼠标移入移出事件
    pycharm意外关闭导致报错Unexpected content storage modification:
  • 原文地址:https://www.cnblogs.com/wust-ouyangli/p/5745659.html
Copyright © 2011-2022 走看看