【求助】主席树板子WA+RE求调
查看原帖
【求助】主席树板子WA+RE求调
93707
Rnfmabj楼主2022/1/8 23:39

RT,64pts,sub#0全WA,sub#4全RE

记录

另,请忽略记录代码里中二的图书馆注释(捂脸),谢谢

#include<bits/stdc++.h>
#define ll long long
#define R read()
using namespace std;
inline ll read() {
	ll s=0,f=1;
	char ch=getchar();
	while(ch<'0'||ch>'9') {
		if(ch=='-')f*=-1;
		ch=getchar();
	}
	while(ch>='0'&&ch<='9') {
		s=s*10+ch-'0';
		ch=getchar();
	}
	return s*f;
}
inline void write(ll x) {
	if(x<0) putchar('-'),x=-x;
	if(x>9) write(x/10),x%=10;
	putchar('0'+x);
}//Don't use it for CF.
inline void wk(ll x){write(x);putchar(' ');}
inline void we(ll x){write(x);putchar('\n');}
ll n,m,top;
ll a[2500005],root[2500005];
struct Tree{ll ls,rs,val;}tree[2500005];
ll Add(ll x){tree[++top]=tree[x];return top;}
ll init(ll x,ll l,ll r){
	x=++top;
	if(l==r){
		tree[x].val=a[l];
		return top;
	}
	ll mid=(l+r)>>1;
	tree[x].ls=init(tree[x].ls,l,mid);
	tree[x].rs=init(tree[x].rs,mid+1,r);
	return x;
}
ll upd(ll x,ll l,ll r,ll target,ll v){
	x=Add(x);
	if(l==r)tree[x].val=v;
	else{
		ll mid=(l+r)>>1;
		if(target<=mid)tree[x].ls=upd(tree[x].ls,l,mid,target,v);
		else tree[x].rs=upd(tree[x].rs,mid+1,r,target,v);
	}
	return x;
}
ll query(ll x,ll l,ll r,ll target){
	if(l==r)return tree[x].val;
	ll mid=(l+r)>>1;
	if(target<=mid)return query(tree[x].ls,l,mid,target);
	return query(tree[x].rs,mid+1,r,target); 
}
int main(){
	n=R,m=R;
	for(ll i=1;i<=n;i++)a[i]=R;
	fflush(stdout); 
	root[0]=init(0,1,n);
	for(ll i=1;i<=m;i++){
		ll ver=R,mo=R,x=R;
		if(mo==1){
			ll y=R;
			root[i]=upd(root[ver],1,n,x,y);
		}
		else {
			we(query(root[ver],1,n,x));
			root[i]=root[ver];
		}
		fflush(stdout); 
	}
	return 0;
}

2022/1/8 23:39
加载中...