MnZn求助
查看原帖
MnZn求助
678115
G__G楼主2023/9/19 17:51
#include<bits/stdc++.h>
using namespace std;
const long long maxn=10000010;
long long tp,n,m,a[maxn],ro[maxn];
struct acdb{
	long long l,r,v;
}tr[maxn];
long long cl(long long no){
	tp++;
	tr[tp]=tr[no];
	return tp;
}
long long mtr(long long no,long long be,long long ed){
	no=++tp;
	if(be==ed){
		tr[no].v=a[be];
		return tp;
	}
	long long mid=(be+ed)>>1;
	tr[no].l=mtr(tr[no].l,be,mid);
	tr[no].r=mtr(tr[no].r,mid+1,ed);
	return no;
}
long long ud(long long no,long long be,long long ed,long long x,long long v){
	no=cl(no);
	if(be==ed){
		tr[no].v=v;
	}
	else{
		long long mid=(be+ed)>>1;
		if(x<=mid){
			tr[no].l=ud(tr[no].l,be,mid,x,v);			
		}
		else{
			tr[no].r=ud(tr[no].r,mid+1,ed,x,v);			
		}
	}
	return no;
}
long long qy(long long no,long long be,long long ed,long long x){
	if(be==ed){
		return tr[no].v;
	}
	else{
		long long mid=(be+ed)>>1;
		if(x<=mid){
			return qy(tr[no].l,be,mid,x);			
		}
		else{
			return qy(tr[no].r,mid+1,ed,x);			
		}
	}
}
int main(){
	cin>>n>>m;
	for(long long i=1;i<=n;i++){
		cin>>a[i];
	}
	ro[0]=mtr(0,1,n);
	for(long long i=1;i<=m;i++){
		long long rt,mo,x,y;
		cin>>rt>>mo>>x;
		if(mo==1){
			cin>>y;
			ro[i]=ud(ro[rt],1,n,x,y);
		}
		else{
			cout<<qy(ro[rt],1,n,x)<<endl;
			ro[i]=ro[rt];
		}
	}
	return 0;
}

80分,不知道哪里挂了

2023/9/19 17:51
加载中...