treap初步,建树,更新,旋转,插入,删除操作

//建树

 struct data{
 	int l,r,v,size,rnd,w;
 }tr[100005];
 

int n,size,root,ans;

void update(int k){
	tr[k].size=tr[tr[k].l].size+tr[tr[k].r].size+tr[k].w; 
} 

单旋

void rturn(int &k){
	int t=tr[k].l;tr[k].l=tr[t].r;tr[t].r=k;
	tr[t].size=tr[k].size;update(k);k=t;
}

void lturn(int &k){
   int t=tr[k].r;tr[k].r=tr[t].l;tr[t].l=k;
   tr[t].size=tr[k].size;update(k);k=t;
}

双旋

srand(19268075);

treap的插入:

void insert(int &k,int x){
	if (k==0){//插入到一个空节点 
		size++;k=size; 
		tr[k].size=tr[k].w=1;
		tr[k].v=x;tr[k].rnd=rand();
		return;
	}
	tr[k].size++;
	if (tr[k].v==x) tr[k].v++;
	else if (x>tr[k].v)
	{
		insert(tr[k].r,x);
		if (tr[tr[k].r].rnd<tr[k].rnd)lturn(k);
		
	 } 
	 else {
	 	insert(tr[k].l,x);
	 	if (tr[tr[k].l].rnd<tr[k].rnd) rturn(k); //维护堆性质 
	 }
}

treap的删除:
和普通的BST删除是一样:
如果sh值小于当前值,则递归至左儿子;大于则递归至右儿子
若当前节点数值的出现次数大于1,则减一(通常将一个权值缩掉)

void del(int &k,int x){
	if (k==0) return;
    if (tr[k])//此处有误 
    {
	if (tr[k].w>1)
	{
		tr[k].w--;tr[k].size--;return;
	}
	if (tr[k].l*tr[k].r==0) k=tr[k].l+tr[k].r;
	else if (tr[tr[k].l].rnd<tr[tr[k]].rnd)
	   rturn (k),del(k,x);
	else lturn(k),del(k,x);
   }
   else if (x>tr[k].v)
      tr[k].size--,del(tr[k].r,x);
   else tr[k].size--,del(tr[k].l,x); 
}
全部评论

相关推荐

牛客42327521...:在你没来公司之前你们公司连登录功能都没做?让一个实习生做登录页面?
点赞 评论 收藏
分享
行云流水1971:这份实习简历的优化建议: 结构清晰化:拆分 “校园经历”“实习经历” 板块(当前内容混杂),按 “实习→校园→技能” 逻辑排版,求职意向明确为具体岗位(如 “市场 / 运营实习生”)。 经历具象化:现有描述偏流程,需补充 “动作 + 数据”,比如校园活动 “负责宣传” 可加 “运营公众号发布 5 篇推文,阅读量超 2000+,带动 300 + 人参与”;实习内容补充 “协助完成 XX 任务,效率提升 X%”。 岗位匹配度:锚定目标岗位能力,比如申请运营岗,突出 “内容编辑、活动执行” 相关动作;申请市场岗,强化 “资源对接、数据统计” 细节。 信息精简:删减冗余表述(如重复的 “负责”),用短句分点,比如 “策划校园招聘会:联系 10 + 企业,组织 200 + 学生参与,到场率达 85%”。 技能落地:将 “Office、PS” 绑定经历,比如 “用 Excel 整理活动数据,输出 3 份分析表;用 PS 设计 2 张活动海报”,避免技能单独罗列。 优化后需强化 “经历 - 能力 - 岗位需求” 的关联,让实习 / 校园经历的价值更直观。 若需要进一步优化服务,私信
实习,投递多份简历没人回...
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务