zoukankan      html  css  js  c++  java
  • [P3834]【模板】可持久化线段树 2(主席树)

    复习一下主席树板子

    #include <bits/stdc++.h>
    using namespace std;
    
    #define int long long
    const int N = 10000005;
    const int V = 1e9;
    int n,m,src[N],a[N],ch[N][2],root[N],ind;
    
    void copynode(int dest,int src)
    {
        ch[dest][0]=ch[src][0];
        ch[dest][1]=ch[src][1];
        a[dest]=a[src];
    }
    
    void modify(int p,int l,int r,int pos,int key)
    {
        a[p]+=key;
        if(l<r)
        {
            if(pos<=((l+r)>>1))
            {
                copynode(++ind,ch[p][0]);
                ch[p][0]=ind;
                modify(ch[p][0],l,(l+r)>>1,pos,key);
            }
            else
            {
                copynode(++ind,ch[p][1]);
                ch[p][1]=ind;
                modify(ch[p][1],((l+r)>>1)+1,r,pos,key);
            }
        }
    }
    
    void modify(int ver,int pos,int key)
    {
        copynode(++ind,root[ver-1]);
        root[ver]=ind;
        modify(root[ver],-V,V,pos,key);
    }
    
    int query(int p,int q,int l,int r,int k)
    {
        if(l==r)
        {
            return l;
        }
        else
        {
            if(k>a[ch[p][0]]-a[ch[q][0]])
            {
                return query(ch[p][1],ch[q][1],((l+r)>>1)+1,r,k-a[ch[p][0]]+a[ch[q][0]]);
            }
            else
            {
                return query(ch[p][0],ch[q][0],l,(l+r)>>1,k);
            }
        }
    }
    
    int query(int verl,int verr,int k)
    {
        return query(root[verr],root[verl],-V,V,k);
    }
    
    signed main()
    {
        ios::sync_with_stdio(false);
    
        cin>>n>>m;
        for(int i=1;i<=n;i++)
        {
            cin>>src[i];
            modify(i,src[i],1);
        }
        a[0]=0;ch[0][0]=ch[0][1]=0;
        for(int i=1;i<=m;i++)
        {
            int l,r,k;
            cin>>l>>r>>k;
            cout<<query(l-1,r,k)<<endl;
        }
    }
    
    
  • 相关阅读:
    个人博客05
    个人随笔04
    ELK-Kibana汉化
    Centos7下使用mail发送邮件
    使用Docker搭建Tomcat运行环境
    Jenkins添加maven插件
    linux下安装nodejs及npm
    服务器重启后Jenkins项目部分丢失问题解决方法
    【linux】如何查看文件的创建、修改时间
    禅道
  • 原文地址:https://www.cnblogs.com/mollnn/p/13660066.html
Copyright © 2011-2022 走看看