指针TLE 2点求助
查看原帖
指针TLE 2点求助
467107
Cap1taL楼主2022/10/6 18:26

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;
}
2022/10/6 18:26
加载中...