主席树求助
  • 板块学术版
  • 楼主_Ch1F4N_
  • 当前回复0
  • 已保存回复0
  • 发布时间2022/7/19 16:12
  • 上次更新2023/10/27 19:31:39
查看原帖
主席树求助
520748
_Ch1F4N_楼主2022/7/19 16:12
#include<bits/stdc++.h>
using namespace std;
struct node{
    int val;
    int left;
    int right;
}tree[100000001];
int top,n;
int roat[100000001];
int sr;
int bulid(int l,int r)
{
	int num;
    num=++top;
    if(l==r)
    {
        cin>>tree[num].val;
    }
    else
    {

    int mid=(l+r)/2;
    tree[num].left=bulid(l,mid);
    tree[num].right=bulid(mid+1,r);
    }
    return num;
}
int update(int num,int l,int r,int x,int val)
{
    top++;
    tree[top]=tree[num];
    num=top;
    if(l==r)
    {
        tree[top].val=val;
    }
    else
    {
        int mid=(l+r)/2;
        if(x<=mid)
        {
        update(tree[num].left,l,mid,x,val);
        }
        else
        {
            update(tree[num].right,mid+1,r,x,val);
        }
    }
    return num;
}
int ask(int num,int l,int r,int x)
{
    if(l==r)
    {
        return tree[num].val;
    }
    else
    {
    int mid=(l+r)/2;
        if(x<=mid)
        {
        return ask(tree[num].left,l,mid,x);
        }
        else
        {
        return ask(tree[num].right,mid+1,r,x);
        }
    } 
}
int main()
{
    int n,m;
    cin>>n>>m;
    roat[0]=bulid(1,n);
//  cout<<1<<endl;
    for(int i=1;i<=m;i++)
    {
        int v,c;
        cin>>v>>c;
        if(c==1)
        {
            int x,y;
            cin>>x>>y;
            roat[i]=update(roat[v],1,n,x,y);
        }
        else
        {
            int x;
            cin>>x;
            cout<<ask(roat[v],1,n,x)<<endl;
            roat[i]=roat[v];
        }
    }
    return 0;
 } 

A了两个点,其他全WA 题目 可持久化线段树1

2022/7/19 16:12
加载中...