已经贡献7发92tps了
所以#2为什么下不下来qwq
#include<iostream>
using namespace std;
const int N=1000005;
struct cjhxds{
int lc,rc,l,r,data;
int add;
}t[N*21];
int total,top,root[N];
int n,m,a[N];
inline int make(int x){
top++;
t[top]=t[x];
return top;
}
inline int build(int p,int l,int r){
p=++top;
if(l==r){t[p].data=a[l];return p;}
int mid=(l+r)>>1;
t[p].lc=build(t[p].lc,l,mid);
t[p].rc=build(t[p].rc,mid+1,r);
return p;
}
inline int update(int p,int l,int r,int x,int y){
p=make(p);
if(l==r){t[p].data=y;return p;}
int mid=(l+r)>>1;
if(x<=mid) t[p].lc=update(t[p].lc,l,mid,x,y);
if(x>mid) t[p].rc=update(t[p].rc,mid+1,r,x,y);
return p;
}
inline int ask(int p,int l,int r,int x){
if(l==r)return t[p].data;
int mid=(l+r)>>1;
if(x<=mid)return ask(t[p].lc,l,mid,x);
if(x>mid)return ask(t[p].rc,mid+1,r,x);
}
int main(){
std::ios::sync_with_stdio(false);
cin>>n>>m;
for(int i=1;i<=n;i++)cin>>a[i];
root[0]=build(0,1,n);
for(int i=1;i<=m;i++){
int bb,pd,x,v;cin>>bb>>pd>>x;
if(pd==1){
cin>>v;
root[i]=update(root[bb],1,n,x,v);
}
if(pd==2){
cout<<ask(root[bb],1,n,x)<<endl;
root[i]=root[bb];
}
}
return 0;
}