zoukankan      html  css  js  c++  java
  • 【洛谷】P3919 【模板】可持久化线段树(主席树)

    题目

    传送门:QWQ

    分析

    主席树的模板,囤着


    代码

    #include <bits/stdc++.h>
    using namespace std;
    const int N=1000010;
    int ls[N*20], rs[N*20], root[N*20], newp, sum[N*20], a[N*20];
    
    inline void insert(int l,int r,int x,int pos,int& cur,int cur1)
    {
        cur=++newp;
        ls[cur]=ls[cur1]; rs[cur]=rs[cur1]; sum[cur]=sum[cur1];
        if(l==r) { sum[cur]=x; return; }
        int mid=l+r>>1;
        if(pos<=mid) insert(l,mid,x,pos,ls[cur],ls[cur1]);
        else insert(mid+1,r,x,pos,rs[cur],rs[cur1]);
    }
    
    inline void build(int l,int r,int& cur)
    {
        cur=++newp;
        if(l==r) { sum[cur]=a[l]; return; }
        int mid=l+r>>1;
        build(l,mid,ls[cur]); build(mid+1,r,rs[cur]);
    }
    
    inline int query(int l,int r,int pos,int cur)
    {
        if(l==r) return sum[cur];
        int mid=l+r>>1;
        if(pos<=mid) return query(l,mid,pos,ls[cur]);
        else return query(mid+1,r,pos,rs[cur]);
    }
    
    int main()
    {
        int n,m;
        scanf("%d%d",&n,&m);
        for(int i=1;i<=n;i++) scanf("%d",&a[i]);
        build(1,n,root[0]);
        
        int v1,opt,x,pos;
        for(int i=1;i<=m;i++)
        {
             scanf("%d%d",&v1,&opt);
            root[i]=root[v1];
            if(opt==1){
                scanf("%d%d",&pos,&x);
                insert(1,n,x,pos,root[i],root[i]);
            }
            else{
                scanf("%d",&pos);
                printf("%d
    ",query(1,n,pos,root[v1]));
            }
        }
        return 0;
    }
    View Code
  • 相关阅读:
    react 有多个按钮时点击单个按钮独立控制Loading
    React路由通信
    体育竞技模拟比赛
    json与csv格式相互转换
    替换表格内容及csv转html及CGI
    excel转换成csv格式
    文件读写笔记
    自定义手绘风
    numpy&matplotlib读书笔记
    Python成绩雷达图
  • 原文地址:https://www.cnblogs.com/noblex/p/8419928.html
Copyright © 2011-2022 走看看