社区讨论

P3919 mle求调

灌水区参与者 1已保存回复 1

讨论操作

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

当前回复
1 条
当前快照
1 份
快照标识符
@m4obrl1n
此快照首次捕获于
2024/12/14 23:21
去年
此快照最后确认于
2025/11/04 12:50
4 个月前
查看原帖
CPP
#include<bits/stdc++.h>
#define ll long long
using namespace std;
ll a[1111111],rt[1001100],n,m,id;
struct node{
	ll ls,rs,dat;
}tree[50055000];
void build(ll &p,ll l,ll r){
	p=++id;
	if(l==r){
		tree[p].dat=a[l];
		return ;
	}
	ll mid=(l+r)/2;
	build(tree[p].ls,l,mid);
	build(tree[p].rs,mid+1,r);
}
void update(ll fa,ll &p,ll l,ll r,ll x, ll y){
	p=++id;
	tree[p]=tree[fa];
	if(l==r){
		tree[p].dat=y;
	}
	ll mid=(l+r)/2;
	if(x<=mid){
		update(tree[p].ls,tree[fa].ls,l,mid,x,y);
	}
	else{
		update(tree[p].rs,tree[fa].rs,mid+1,r,x,y);
	}
}
int ask(ll p,ll x,ll l,ll r){
	if(l==r){
		return tree[p].dat;
	}
	ll mid=(l+r)/2;
	if(x<=mid){
		return ask(tree[p].ls,x,l,mid);
	}
	else{
		return ask(tree[p].rs,x,mid+1,r);
	}
}
int main(){
	cin>>n>>m;
	for(int i=1;i<=n;++i){
		cin>>a[i];
	}
	build(rt[0],1,n);
	for(int i=1;i<=m;++i){
		ll t,op,x,y;
		cin>>t>>op;
		if(op==1){
			cin>>x>>y;
			update(rt[t],rt[i],1,n,x,y);
		}
		else{
			cin>>x;
			cout<<ask(rt[t],x,1,n);
			rt[i]=rt[t];
		}
	}
	return 0;
}

回复

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

正在加载回复...