24分WA求助
查看原帖
24分WA求助
12639
JohnsonZou楼主2021/12/20 22:00
#include<bits/stdc++.h>
#define maxn 1000001
using namespace std;
int n,m,root[maxn],f[maxn],cnt=0;
struct nod{
	int l,r,x;
}t[40*maxn];
int build(int l,int r){
	int num=++cnt;
	if(l==r)t[num].x=f[l];
	else{
		t[num].l=build(l,(l+r)/2);
		t[num].r=build((l+r)/2+1,r);
	}
	return num;
}
void chg(int l,int r,int p,int x,int pre,int &now){
	now=++cnt;
	t[now]=t[pre];
	int mid=(l+r)>>1;
	if(l==r)t[now].x=x;
	else{
		if(p<=mid)chg(l,mid,p,x,t[pre].l,t[now].l);
		else chg(mid+1,r,p,x,t[pre].l,t[now].r);
	}
}
int query(int l,int r,int p,int now){
	int mid=(l+r)>>1;
	if(l==r)return t[now].x;
	else{
		if(p<=mid)return query(l,mid,p,t[now].l);
		else return query(mid+1,r,p,t[now].r);
	}
}
int main(){
	cin>>n>>m;
	for(int i=1;i<=n;i++){
		scanf("%d",&f[i]);
	}
	root[0]=build(1,n);
	for(int i=1;i<=m;i++){
		int ver,opt,pos,val;
		scanf("%d%d%d",&ver,&opt,&pos);
		if(opt==1){
			scanf("%d",&val);
			chg(1,n,pos,val,root[ver],root[i]);
		}
		else{
			root[i]=root[ver];
			cout<<query(1,n,pos,root[ver])<<endl;
		}
	}
} 
2021/12/20 22:00
加载中...