XOJ4 树的构造

题意:模拟一颗n(2 <= n <= 100000)个点的二叉搜索树的插入过程,输出最终每个点父亲的权值。

分析:

昨天比赛的第三题,当时写的暴力混了80分,gzz神犇线段树A过,无限orz中...

这题其实用set就可以做(感觉zrt特别喜欢用set,不过set的确是一个非常好用的工具),每个点的父亲就是在他前面的点中比他大的最小的和比他小的最大的中插入顺序更靠后的那个(这句话说起来真别扭...)

#include<cstdio>
#include<set>
#define p std::pair<int,int> 
#define m(a,b) std::make_pair(a,b)
int n,x; std::set<p> s;
int main(){
	scanf("%d%d",&n,&x); s.insert(m(x,1));
	for(int i=2;i<=n;i++){
		scanf("%d", &x);
		std::set<p>::iterator k=s.lower_bound(m(x,i)), j=k--;
		if((*k).second<(*j).second) printf("%d ",(*j).first); else printf("%d ",(*k).first);
		s.insert(m(x,i));
	}
	return 0;
}


  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值