谢谢大佬!
#include<bits/stdc++.h>
#define maxn 1000005
using namespace std;
struct Tree{
int sum,l,r,ls,rs;
}tr[maxn<<5];
int n,m,cnt,root[maxn];
void insert(int last,int rt,int l,int r,int p,int x)
{
if(!rt)
{
rt=++cnt;
}
if(l==r)
{
tr[rt].sum=x;
return;
}
int mid=(l+r)>>1;
if(p<=mid)
{
tr[rt].rs=tr[last].rs;
insert(tr[last].ls,tr[rt].ls,l,mid,p,x);
}
else
{
tr[rt].ls=tr[last].ls;
insert(tr[last].rs,tr[rt].rs,mid+1,r,p,x);
}
}
int query(int rt,int l,int r,int p)
{
if(l==r)
return tr[rt].sum;
int mid=(l+r)>>1;
if(p<=mid)
{
return query(tr[rt].ls,l,mid,p);
}
else
{
return query(tr[rt].rs,mid+1,r,p);
}
}
int main()
{
cin>>n>>m;
for(int i=1;i<=n;i++)
{
int x;
cin>>x;
insert(root[0],root[0],1,n,i,x);
}
for(int i=1;i<=m;i++)
{
int v,opt;
cin>>v>>opt;
if(opt==1)
{
int loc,val;;
cin>>loc>>val;
insert(root[v],root[i],1,n,loc,val);
}
else
{
int loc;
cin>>loc;
cout<<query(root[v],1,n,loc)<<endl;
root[i]=root[v];
}
}
return 0;
}