0分求调:(
查看原帖
0分求调:(
694389
Cainiao_Chen楼主2025/1/16 19:45

谢谢大佬!


#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;
}
2025/1/16 19:45
加载中...