样例全输出0求救
查看原帖
样例全输出0求救
578029
ivyjiao楼主2024/10/2 19:53
#include<bits/stdc++.h>
#define int long long
using namespace std;
const int N=1e6+1;
int n,m,a[N],sum,ch[N][2],b[N],rt[N],v,op,loc,val;
int clone(int u){
    ch[++sum][0]=ch[u][0];
    ch[sum][1]=ch[u][1];
    b[sum]=b[u];
    return sum;
}
int build(int u,int l,int r){
    u=++sum;
    if(l==r){
        b[u]=a[l];
        return u;
    }
    int mid=(l+r)/2;
    ch[u][0]=build(0,l,mid);
    ch[u][1]=build(0,mid+1,r);
    return u;
}
int cov(int u,int l,int r,int x,int k){
    u=clone(u);
    if(x==l&&r==x){
        b[u]=a[l];
        return u;
    }
    int mid=(l+r)/2;
    if(x<=mid) ch[u][0]=cov(0,l,mid,x,k);
    else ch[u][1]=cov(0,mid+1,r,x,k);
    return u;
}
int query(int u,int l,int r,int x){
    if(x==l&&r==x) return b[u];
    int mid=(l+r)/2;
    if(x<=mid) return query(0,l,mid,x);
    else return query(0,mid+1,r,x);
}
signed main(){
    cin>>n>>m;
    for(int i=1;i<=n;i++) cin>>a[i];
    rt[0]=build(0,1,n);
    for(int i=1;i<=m;i++){
        cin>>v>>op>>loc;
        if(op==1){
            cin>>val;
            rt[i]=cov(rt[v],1,n,loc,val);
        }
        else{
            cout<<query(rt[v],1,n,loc)<<endl;
			rt[i]=rt[v];
        }
    }
}
2024/10/2 19:53
加载中...