关于fhq-treap查询的写法
  • 板块灌水区
  • 楼主Godzilla
  • 当前回复6
  • 已保存回复6
  • 发布时间2021/5/24 15:18
  • 上次更新2023/11/4 22:47:13
查看原帖
关于fhq-treap查询的写法
147441
Godzilla楼主2021/5/24 15:18

可持久化平衡树模板

这道题我用这种写法,Tle 19个点 :

提交记录

int Rank(int x,int rt){
	int now=rt,ans=0;
	while(1){
		if(Val(now)>x){now=Son(now,0);}
		else{
			ans+=Siz(Son(now,0))+1;
			if(Val(now)==x){return ans;}
			else{now=Son(now,1);}
		}
	}
}

int Kth(int x,int rt){
	int now=rt;
	while(1){
		if(!now){return kInf;}
		if(Siz(Son(now,0))>=x){now=Son(now,0);}
		else if(Siz(Son(now,0))+1==x){return Val(now);}
		else{
			x-=Siz(Son(now,0))+1;
			now=Son(now,1);
		}
	}
}

用这种写法,AC :

提交记录

int Pre(int k,int &rt){//前缀
	Split(rt,k-1,x,y);
	int res=Kth(Siz(x),x);
	rt=Merge(x,y);
	return res==kInf?-kInf:res;
}

int Suf(int k,int &rt){//后缀
	Split(rt,k,x,y);
	int res=Kth(1,y);
	rt=Merge(x,y);
	return res;
}

请问这两种写法有什么不同吗?

2021/5/24 15:18
加载中...