Why WA 32pts?
查看原帖
Why WA 32pts?
1155762
TCIC_4294967296楼主2024/7/12 18:06
#include<bits/stdc++.h>
using namespace std;
const int N = 1e6+5,MLOGN=N*32;
#define int long long
#define ls lson[now]
#define rs rson[now]
#define mid ((l+r)>>1)

int n,m,a[N];

int root[N],tr[8*N+MLOGN],lson[8*N+MLOGN],rson[8*N+MLOGN],tot;
void pu(int now){
	tr[now]=tr[ls]+tr[rs];
}
void build(int &now,int l,int r){
	if(!now) now=++tot;
	if(l==r){
		tr[now]=a[l];
		return;
	}
	build(ls,l,mid);
	build(rs,mid+1,r);
	pu(now);
}
void insert(int &now,int &las,int l,int r,int v,int d){
	if(!now) now=++tot;
	if(l==r){
		tr[now]=d;
		return;
	}
	if(v<=mid) rs=rson[las],insert(ls,lson[las],l,mid,v,d);
	else ls=lson[las],insert(rs,rson[las],mid+1,r,v,d);
	pu(now);
}
int query(int &now,int l,int r,int v){
	if(l==r) return tr[now];
	if(v<=mid) return query(ls,l,mid,v);
	return query(rs,mid+1,r,v);
}
void copytree(int &now,int &las){
	ls=lson[las],rs=rson[las];
}


signed main(){
	ios::sync_with_stdio(0),cin.tie(0);
	cin>>n>>m;
	for(int i=1;i<=n;i++) cin>>a[i];
	build(root[0],1,n);
	for(int i=1;i<=m;i++){
		int v,opt,p;
		cin>>v>>opt>>p;
		if(opt==1){
			int d;
			cin>>d;
			insert(root[i],root[v],1,n,p,d);
		}else{
			copytree(root[i],root[v]);
			cout<<query(root[i],1,n,p)<<"\n";
		}
	}
	return 0;
}
2024/7/12 18:06
加载中...