社区讨论

求条(40pts,AC了#5之前的所有)

P3919【模板】可持久化线段树 1(可持久化数组)参与者 4已保存回复 8

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
7 条
当前快照
1 份
快照标识符
@mieibl4z
此快照首次捕获于
2025/11/25 19:43
3 个月前
此快照最后确认于
2025/11/25 20:29
3 个月前
查看原帖
CPP
#include<bits/stdc++.h>
#define ll long long
using namespace std;
ll cnt;
struct tree{
	ll v,ls,rs;
}t[30000005];
void add(ll id,ll la,ll l,ll r,ll v,ll x)
{
	if(l==r)
	{
		t[id].v=v;
		return;
	}
	ll mid=l+r>>1;
	if(mid>=x)
	{
		t[id].ls=++cnt; t[id].rs=t[la].rs;
		add(t[id].ls,t[la].ls,l,mid,v,x);
	}
	else
	{
		
		t[id].ls=t[la].ls; t[id].rs=++cnt;
		add(t[id].rs,t[la].rs,mid+1,r,v,x);
	}
	return;
}
ll fid(ll id,ll l,ll r,ll x)
{
	if(l==r) return t[id].v;
	ll mid=l+r>>1;
	if(mid>=x) return fid(t[id].ls,l,mid,x);
	else return fid(t[id].rs,mid+1,r,x);
}
void build(ll id,ll l,ll r)
{
	if(l==r)
	{
		cin>>t[id].v;
		return;
	}
	t[id].ls=id<<1; t[id].rs=id<<1|1;
	ll mid=l+r>>1;
	build(id<<1,l,mid);
	build(id<<1|1,mid+1,r);
	return;
}
ll n,m,la,opt,x,v,i,p[1000005];
int main()
{
	ios::sync_with_stdio(0); cin.tie(0); cout.tie(0);
	cin>>n>>m;
	build(1,1,n);
	cnt=2*n-1; p[0]=1;
	for(i=1;i<=m;i++)
	{
		cin>>la>>opt>>x;
		p[i]=++cnt;
		if(opt==1)
		{
			cin>>v;
			add(cnt,p[la],1,n,v,x);
		}
		if(opt==2)
		{
			t[cnt].ls=t[p[i-1]].ls; t[cnt].rs=t[p[i-1]].rs;
			cout<<fid(p[la],1,n,x)<<"\n";
		}
	}
    return 0;
}

回复

8 条回复,欢迎继续交流。

正在加载回复...