当前位置: 首页 > wzjs >正文

泗洪网站建设在线工具网站

泗洪网站建设,在线工具网站,电商网站建设价格低,用网站模板做新网站splaysplaysplay 是一种平衡树,但是并不完全平衡。 它凭借一系列操作使得树趋近于平衡,所以与 AVLAVLAVL 比起来,时间可能没那么快,但是 splaysplaysplay 可以应用到的地方很多,比如说区间翻转,这是 AVLAV…

splaysplaysplay 是一种平衡树,但是并不完全平衡。

它凭借一系列操作使得树趋近于平衡,所以与 AVLAVLAVL 比起来,时间可能没那么快,但是 splaysplaysplay 可以应用到的地方很多,比如说区间翻转,这是 AVLAVLAVL 无法做到的。

并且LCT要用到splay。

规定

  • tree[x].son[0/1]tree[x].son[0/1]tree[x].son[0/1] 表示 xxx 的左右儿子是谁。
  • tree[x].sizetree[x].sizetree[x].size 表示以 xxx 为根的子树大小。
  • tree[x].fatree[x].fatree[x].fa 表示 xxx 的父亲节点。

原理

旋转

splaysplaysplay 也是利用旋转来维护的,它旋转时传的是儿子节点,然后将儿子节点转到父亲节点。

旋转时有两种情况,一种是我是你的左儿子,一种是我是你的右儿子,但其实两种情况分析起来本质上都差不多,可以打在一起。(不用像 AVLAVLAVL 一样分开)

代码

int pdd(int x) { return tree[tree[x].fa].son[1] == x; }//x是它父亲的哪个儿子
void rotato(int x) {int y = tree[x].fa, z = tree[y].fa, p = pdd(x);tree[z].son[pdd(y)] = x;tree[x].fa = z, tree[y].fa = x;tree[y].son[p] = tree[x].son[p ^ 1], tree[tree[x].son[p ^ 1]].fa = y;tree[x].son[p ^ 1] = y;updata(y), updata(x);//更新信息
}

splay

splaysplaysplay 肯定有 splaysplaysplay 操作。

splay(x,y)splay(x, y)splay(x,y) 就是用来将 xxx 转成 yyy 的儿子。

用到了旋转操作。

代码

bool pd(int x, int y) { return tree[x].fa != y; }
void splay(int x, int goal) {push(x);//因为有时候要区间翻转,这个用来用来下传翻转标记,如果题目没有翻转可以不用for (int y; pd(x, goal); rotato(x)) {y = tree[x].fa;if (pd(y, goal))//用来加快程序速度,删除对程序正确性不会有任何影响rotato(pdd(y) == pdd(x) ? y : x);}if (!goal)root = x;
}

查找,删除的操作都可以参照AVL来做,所以不再叙述。(可以看看我的另一篇博客)

翻转

我们来看看翻转操作如何实现。

我们假设要将区间 l,rl, rl,r 翻转,我们设 l′,r′l',r'l,r 分别为 lll 位置的左边, rrr 位置的右边。

则我们可以先将 lll 节点 splaysplaysplay 到根节点,再将 rrr 节点 splaysplaysplay 到根节点的右儿子。

此时 rrr 节点的左子树就是我们要翻转的区间。

由于平衡树的性质,我们只需要将该子树的每个节点的左右儿子交换,便可翻转整个区间。

此时我们前面的 splaysplaysplay 中的 pushpushpush 就是用来将翻转标记翻转下来。

代码

void push(int x) {if (tree[x].fa)push(tree[x].fa);pushdown(x);
}
void reverse(int l, int r) { //此时的l,r就是l',r'splay(l, 0), splay(r, l), tree[tree[r].son[0]].flag ^= 1;
}

此时 splaysplaysplay 的基本操作就讲完了。

http://www.dtcms.com/wzjs/48347.html

相关文章:

  • 怎么办个人网站网站快速推广
  • 南宁软件优化网站建设百度网址是多少 百度知道
  • 山东品牌建设网站快速网站
  • 程序员网站建设商业公司的域名
  • 手机网站用什么后台外链发布
  • 最贵网站建设平台推广是做什么的
  • 网站 数据库自己搭建网站需要什么
  • 沧州*网站建设深圳百度搜索排名优化
  • wordpress视频嵌入移动端打不开枫林seo工具
  • 政府网站专题栏目建设方案市场营销
  • 外包做的网站 需要要源代码吗企业培训体系搭建
  • 网站顶部公告代码深圳网络推广服务公司
  • wordpress必备工具seo模拟点击有用吗
  • 姜堰区网站建设新网站推广最直接的方法
  • 西安网站建设多少钱网站优化排名易下拉排名
  • 昆明网站建设创意旺道网站排名优化
  • 淄博网站开发找网泰网站页面分析作业
  • ps做网站字号大小广州网络推广选择
  • 小程序登录入口软件青岛百度seo代理
  • wordpress 后台禁止谷歌字体湖南正规关键词优化首选
  • 济南物流行业网站建设工具网站注册步骤
  • 代运营公司前十名资源网站优化排名优化
  • 17做网站广州营销推广软件
  • 建立一个个人网站宁波seo网络推广多少钱
  • jeecmsaso优化推广
  • 武汉做营销型网站推广识图找图
  • 可以自己做头像的网站12345浏览器
  • html模板网站模板下载企业网站推广效果指标分析
  • 筑梦做网站新乡网站优化公司推荐
  • 网站建设公司咋样自媒体推广渠道有哪些