华师一附中OI组

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 2992|回复: 2
打印 上一主题 下一主题

FHQ Treap(无旋)简介

[复制链接]

738

主题

1485

帖子

5420

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
5420
跳转到指定楼层
楼主
发表于 2020-5-3 18:30:13 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
回复

使用道具 举报

738

主题

1485

帖子

5420

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
5420
沙发
 楼主| 发表于 2020-5-3 18:31:45 | 只看该作者
  1. void split(int rt, int & a, int & b, int val) {
  2.     if (rt == 0) {
  3.         a = b = 0;
  4.         return;
  5.     }
  6.     if (tree[rt].val <= val) {
  7.         a = rt;
  8.         split(tree[rt].rc, tree[a].rc, b, val);
  9.     } else {
  10.         b = rt;
  11.         split(tree[rt].lc, a, tree[b].lc, val);
  12.     }
  13.     update(rt);
  14. }
复制代码
回复 支持 反对

使用道具 举报

738

主题

1485

帖子

5420

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
5420
板凳
 楼主| 发表于 2020-5-3 18:32:15 | 只看该作者
  1. void merge(int & rt, int a, int b) {
  2.     // 前提:a的权值全部 < b的权值
  3.     if (a == 0 || b == 0) {
  4.         rt = a + b;
  5.         return;
  6.     }
  7.     if (tree[a].rnk < tree[b].rnk) {
  8.         rt = a;
  9.         merge(tree[rt].rc, tree[a].rc, b);
  10.     } else {
  11.         rt = b;
  12.         merge(tree[rt].lc, a, tree[b].lc);
  13.     }
  14.     update(rt);
  15. }
复制代码
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|小黑屋|服务支持:DZ动力|华师一附中OI组  

GMT+8, 2024-11-2 18:26 , Processed in 0.113154 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表