线段树-Count on a Treap-神题

Count on a Treap

题目来源

Codechef Feb 2014 COT5
https://www.codechef.com/problems/COT5

问题提出

什么是Treap

  • 是一颗二叉搜索树,每个节点拥有keykeykey属性.
  • 是一颗堆,每个节点拥有weightweightweight属性

问题

  • nnn次操作,三种类型,要求维护"大根Treap"
    • (0,k,w)(0,k,w)(0,k,w) ,插入keykeykeyk,weightk,weightk,weightwww的点.
    • (1,k)(1,k)(1,k),删除keykeykeykkk的点
    • (2,ku,kv)(2,k_u,k_v)(2,ku,kv),询问keykeykeyku,kvk_u,k_vku,kv的两点在TreapTreapTreap中的距离.

保证keykeykey,weightweightweight均不相同.

问题解答

dist(u,v)=dep(u)+dep(v)−2∗dep(lca)dist(u,v) = dep(u) + dep(v) - 2* dep(lca)dist(u,v)=dep(u)+dep(v)2dep(lca)

我们以keykeykey为下标,将这个树按中序遍历展开.

显然[ku,kv][k_u,k_v][ku,kv]之间最大的weightweightweight最大的点就是两点的lcalcalca.

证明:首先lcalcalca一定在区间[ku,kv][k_u,k_v][ku,kv]之间,不然ku,kvk_u,k_vku,kv将位于lcalcalca的同一侧,这不可能.其次权重最大的点一定是这颗子树的根节点,这个点一定是祖先,如果它不是lcalcalca的话,那么它的keykeykey将大于或小于lcalcalca形成的子树中所有的点的keykeykey,也就是说它不在区间[ku,kv][k_u,k_v][ku,kv]之间,矛盾.

至此,用线段树可以轻松维护lcalcalca.

那么如何维护一个点在树上的深度呢?

根据Treap的特殊性质,我们知道每个点的weightweightweight一定小于他父亲的weightweightweight.

从这个点到根节点的祖先链上的weightweightweight是不断递增的.

这里有一个非常特殊的性质,在序列上就是从这个点往两侧各找一个直接的递增子序列,那么序列上的点都是他的祖先.

这个性质基于这样一个事实:每个点左右两侧的第一个大于它weightweightweight的点,都是这个点的一个祖先.因为其中一个点是它的父亲,而另一个点…自己画图观察一下就好了.

因此两个递增序列的长度和就是它到根的距离.

如何维护某一个点向右的直接递增序列呢.也是使用线段树,参考我的另一篇博客,楼房重建.

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/321059.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

P6834-[Cnoi2020]梦原【数学期望,树状数组】

正题 题目链接:https://www.luogu.com.cn/problem/P6834?contestId34123 题目大意 nnn个点,每个点i(i≠1)i(i\neq 1)i(i​1)随机连接[i−k,i−1][i-k,i-1][i−k,i−1]中的一个点。对于每个点有一个权值aia_iai​。每次可以选择一个全部都是正权值的连通块里所有…

好代码是管出来的——使用Git来管理源代码

软件开发过程中一个重要的产出就是代码,软件的编码过程一般是由一个团队共同完成,它是一个并行活动,为了保证代码在多人开发中能够顺利完成,我们需要使用代码版本控制工具来对代码进行统一存储,并追踪每一份代码的历史…

【DP】序列

序列 题目大意: 定义“好序列”为满足每一个数是上一个数的倍数的序列,求一个长度为K的“好序列” 原题: 题目描述 一个长度为k的整数序列b1,b2,…,bk(1≤b1≤b2≤…≤bk≤N)称…

线段树-楼房重建-洛谷-P4198

楼房重建 题目大意 小A的楼房外有一大片施工工地,工地上有N栋待建的楼房。每天,这片工地上的房子拆了又建、建了又拆。他经常无聊地看着窗外发呆,数自己能够看到多少栋房子。 为了简化问题,我们考虑这些事件发生在一个二维平面…

P6835-[Cnoi2020]线形生物【期望dp】

正题 题目链接:https://www.luogu.com.cn/problem/P6835?contestId34123 题目大意 n1n1n1个点,其中每个iii向i1i1i1连边(i≤n)(i\leq n)(i≤n),然后有mmm对(u,v)(u,v)(u,v)表示uuu向vvv连边u≥vu\geq vu≥v。开始在点111,每次随机走一个相连…

【DP】游戏

游戏 题目大意: 有一个图,第s秒在点p会出现c个怪物(过了这一秒就会消失),小明可以从任意一个点出发(从第一秒开始),有m条路径(无向),链接着两个…

定时调度系列之Quartz.Net详解

一. 背景我们在日常开发中,可能你会遇到这样的需求:"每个月的3号给用户发信息,提醒用户XXX "、"每天的0点需要统计前一天的考勤记录"、"每个月的1号计算上个月的库存情况"、"定时初始化数据供其它业务使用…

CF1419E-Decryption【数论,dfs】

正题 题目链接:https://www.luogu.com.cn/problem/CF1419E 题目大意 nnn的所有约数排成一个圈,求一个顺序使得相邻的互质的数最少。 解题思路 质因数分解后,我们考虑每个质因数之间填什么。对于两个质因数a,ba,ba,b。显然a∗ba*ba∗b也是nnn的约数&…

P4445 最长回文串

P4445 最长回文串 题目描述 顺序和逆序读起来完全一样的串叫做回文串。比如acbcaacbcaacbca是回文串,而abcabcabc不是(abc的顺序为abcabcabc,逆序为cbacbacba,不相同)。 输入长度为nnn的串SSS,求SSS的最…

RyuJIT的华丽转身

RyuJIT是作为.NET即时编译器的代号称谓,它是.NET运行时的基本组件之一。与此相反的是,Roslyn作为C#编译器,其编译C#代码成为IL字节码。然后,其再将IL字节码编译成相对于多种处理器的机器码。随着最近对dotnet/coreclr #18064的合并…

【树状数组】【dfs】树

树 题目大意: 有一棵树,当给一个点加上一个val时,他的儿子会减val,而他儿子的儿子会加上val(-(-val)val),有m条指令,要不输出某个点的值,要不给…

SP1811-Longest Common Substring【SAM】

正题 题目链接:https://www.luogu.com.cn/problem/SP1811 题目大意 求两个串的最长公共子串。 解题思路 对与第一个串首先构建一个SAMSAMSAM,然后考虑让第二个串在上面匹配。 对于枚举的每个位置要在SAMSAMSAM上找一个节点使得它的后缀是枚举到的位置的后缀。所…

使用Nexus搭建私有Nuget仓库

前言Nuget是ASP .NET Gallery的一员,是免费、开源的包管理工具,专注于在.Net / .Net Core应用开发过程中第三方组件库的管理,相对于传统单纯的dll引用要方便、科学得多。其中nuget.org是最著名的Nuget公开库,但是企业内部开发的&a…

Wannafly挑战赛26 题解

Wannafly挑战赛26 题目连接 https://www.nowcoder.com/acm/contest/212#question A. 御坂网络 枚举圆心所在的位置,O(n)O(n)O(n) 检查即可,总时间复杂度为O(n2)O(n^2)O(n2) B. 冥土追魂 这题比较坑,我感觉题意叙述有问题,总之也是一道水题,题解略去. C. 七彩线段 题解 …

初一模拟赛总结(3.16)

成绩: rankrankranknamenamenamescorescorescoreT1T1T1T2T2T2T3T3T3T4T4T4111lyflyflyf210210210303030100100100000808080222hkyhkyhky190190190100100100000101010808080333fyfyfy120120120100100100000202020000444tjhtjhtjh100100100100100100000000000555wjjwj…

牛客挑战赛43C-最优公式【二分】

正题 题目链接:https://ac.nowcoder.com/acm/contest/7413/C 题目大意 给一个序列AAA,求两个a,ba,ba,b使得∑i1n∑j1nmax{∣Ai−a∣,∣Aj−b∣}\sum_{i1}^n\sum_{j1}^nmax\{|A_i-a|,|A_j-b|\}i1∑n​j1∑n​max{∣Ai​−a∣,∣Aj​−b∣}最小。 解题思路 因为是取…

好代码是管出来的——Git的分支工作流与Pull Request

上一篇文章好代码是管出来的——使用Git来管理源代码 介绍了常用的版本控制工具以及git的基本用法,从基本用法来看git与其它的版本控制工具好像区别不大,都是对代码新增、提交进行管理,可以查看提交历史、代码差异等功能。但实际上git有一个重…

牛客练习赛29 题解

牛客练习赛29 A. 可持久化动态图上树状数组维护01背包 题解 这题跟标题没有任何关系… 贪心的使得负数删除的时候下标尽可能大,然后正数的时候下标尽可能小. 观察到每个数下标最大的时候就是它的初始下标,下标的最小值是1. 然后贪心一下就好了. 代码 #include <iost…

【Floyed】小萨的烦恼(ssl 1624)

小萨的烦恼 ssl 1624 题目大意&#xff1a; 一个无向图&#xff0c;可以使其中一条道路的值除以2&#xff0c;求两个点之间的最短路 原题&#xff1a; Description 圣诞节又要到了&#xff01;小萨希望和自己心仪的MM一起出去度过一个浪漫的的圣诞节。他进行了详尽的准备…

好代码是管出来的——使用GitHub

前面的文章介绍了Git的基本概念和用法&#xff0c;本文则是基于GitHub的一个实践介绍&#xff0c;主要内容有&#xff1a;GitHub简介个人与组织仓库的创建与维护Fork与pull request小结GitHub简介GitHub是一个Git的远程代码托管平台&#xff0c;它除了提供代码托管外&#xff0…