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
  • 相关阅读:
    Redis之分布式锁的使用
    Redis之lua脚本
    Redis 集群的水平扩缩容
    Redis集群搭建及原理
    Redis 的主从、哨兵架构
    CompletableFuture 使用介绍
    Spring Boot 2.x使用H2数据
    pom.xml
    nexus-staging-maven-plugin 踩坑
    安卓Hook折腾研究的笔记记录
  • 原文地址:https://www.cnblogs.com/noblex/p/8419928.html
Copyright © 2011-2022 走看看