zoukankan      html  css  js  c++  java
  • 洛谷P3919 题解

    题目链接

    (Solution:)

    可持久化线段树模板题
    我们使用元区间(即(l==r))来存储数组中的元素

    (Code:)

    #include<bits/stdc++.h>
    using namespace std;
    const int N=1e7+50;
    int n,m,len,a[N],b[N],tmp,pre[N],rt[N],tot;
    map<int,int> mp;
    struct segtree
    {
    	int ls,rs,val;
    }tree[N<<4];            
    inline int read()
    {
    	int val=0,f=1;
    	char ch=0;
    	while(!isdigit(ch))
    	{
    		if(ch=='-') f=-1;
    		ch=getchar();
    	}
    	while(isdigit(ch))
    	{
    		val=(val<<1)+(val<<3)+(ch^48);
    		ch=getchar();
    	}
    	return val*f;
    }
    inline int clone(int x)
    {
    	tot++;
    	tree[tot]=tree[x];
    	return tot;
    }
    inline void pushup(int x)
    {
    	tree[x].val=tree[tree[x].ls].val+tree[tree[x].rs].val;
    }
    inline int build(int t,int l,int r)
    {
    	t=++tot;
    	if(l==r)
    	{
    		tree[t].val=a[l];
    		return tot;
    	}
    	int mid=(l+r)>>1;
    	tree[t].ls=build(tree[t].ls,l,mid);
    	tree[t].rs=build(tree[t].rs,mid+1,r);
    	return t;
    }
    inline int update(int x,int l,int r,int pos,int c)
    {
    	x=clone(x);
    	if(l==r)
    	{
    		tree[x].val=c;
    		return x;
    	}
    	int mid=(l+r)>>1;
    	if(pos<=mid) tree[x].ls=update(tree[x].ls,l,mid,pos,c);
    	else tree[x].rs=update(tree[x].rs,mid+1,r,pos,c);
    	return x;
    }
    inline int query(int x,int l,int r,int pos)
    {
    	if(l==r) return tree[x].val;
    	int mid=(l+r)>>1;
    	if(pos<=mid) return query(tree[x].ls,l,mid,pos);
    	return query(tree[x].rs,mid+1,r,pos);
    
    }
    int main(void)
    {
    	n=read(),m=read();
    	for(int i=1;i<=n;i++) a[i]=read();
        rt[0]=build(0,1,n);
        for(int i=1;i<=m;i++)
    	{
            int xxj=read(),op=read(),x=read();
            if(op==1)
    		{
                int y=read();
                rt[i]=update(rt[xxj],1,n,x,y); 
            }
            else
    		{
                printf("%d
    ",query(rt[xxj],1,n,x));
                rt[i]=rt[xxj];
            }
        }
        return 0;
    }
    
  • 相关阅读:
    ubuntu 14.04 安装python包psycopg2
    vmare 往 virtualbox迁移
    docker-compose & docker 镜像/加速
    nodejs & npm & gulp 安装和配置
    airflow 优化
    airflow 部署
    windows 上vmare超卡的问题解决方案
    HDU 6781 Solo (贪心 + 优先队列)
    HDU 6779 Drink (最小费用流)
    HDU 6778 Car (状压DP)
  • 原文地址:https://www.cnblogs.com/lgj-lgj/p/12334799.html
Copyright © 2011-2022 走看看