MnZn刚开始尝试用指针,发现->很简洁上瘾了 但是这个TLE了
麻烦有大佬解答是指针会更慢吗?还是我的视线有问题?
马蜂良好罢应该(逃
#include <bits/stdc++.h>
#define MAXN 1000005
#define int long long
#define RIN rin()
#define LXF int
using namespace std;
inline LXF rin(){
LXF x=0,w=1;char ch=0;
while(ch<'0'||ch>'9'){if(ch=='-') w=-1;ch=getchar();}
while(ch>='0'&&ch<='9'){x=x*10+(ch-'0');ch=getchar();}
return x*w;
}
struct ST{
int l=0,r=0;
int val=0;
ST *ls=NULL,*rs=NULL;
};
ST* rt[MAXN];
int n,m,a[MAXN];
void build(ST *p,int l,int r){
p->l=l,p->r=r;
if(l==r){
p->val=a[l];
return ;
}
int mid=(l+r)>>1;
build(p->ls=new ST,l,mid);
build(p->rs=new ST,mid+1,r);
}
ST* modify(ST *p,int x,int k){
if(p->l>x||p->r<x) return NULL;
if(p->l == p->r && p->l == x){
ST *c=new ST;
*c=*p;
c->val=k;
return c;
}
ST *L=modify(p->ls,x,k);
ST *R=modify(p->rs,x,k);
ST *c=new ST;
*c=*p;
if(L!=NULL) c->ls=L;
if(R!=NULL) c->rs=R;
return c;
}
int qurey(ST *p,int x){
if(p->l>x||p->r<x) return -0x7fffffff;
if(p->l == p->r && p->l == x) return p->val;
return max(qurey(p->ls,x),qurey(p->rs,x));
}
signed main(){
n=RIN,m=RIN;
for(int i=1;i<=n;i++) a[i]=RIN;
rt[0]=new ST;
build(rt[0],1,n);
for(int i=1;i<=m;i++){
int v=RIN,op=RIN;
if(op==1){
int x=RIN,k=RIN;
rt[i]=modify(rt[v],x,k);
}else if(op==2){
int x=RIN;
printf("%lld\n",qurey(rt[v],x));
rt[i]=rt[v];
}
}
return 0;
}