笛卡尔树 学习笔记
定义
笛卡尔树是一种树,每个节点有两个权值 。如果单看 ,它是一棵二叉搜索树(BST);如果单看 ,它是个小根堆(Heap)。
其实 Treap 就是一种笛卡尔树,只不过 是随机赋值的。
构建
板子题
首先按照 升序排序(这题不需要)。
接下来就是一个一个插入了。我们发现要插入的点全部在右链(即从根结点一直往右子树走,经过的结点形成的链)上,所以我们需要维护右链上的节点。
我们发现右链上的点最多进出一次(或者说每个点在右链中存在的是一段连续的时间),所以我们就可以用栈维护右链上的节点,复杂度为 。
代码如下:
#include<cstdio> #define maxn 10000039 using namespace std; int n,p[maxn]; struct JTZ{ int ls,rs; }a[maxn]; int s[maxn],top,k; ll ansl,ansr; int main(){ scanf("%d",&n); register int i; top=0; for(i=1;i<=n;i++) scanf("%d",&p[i]); for(i=1;i<=n;i++){ k=top; while(top&&p[s[k]]>p[i]) k--; if(k) a[s[k]].rs=i; if(k<top) a[i].ls=s[k+1]; s[++k]=i; top=k; } ansl=ansr=0; for(i=1;i<=n;i++) ansl^=1ll*i*(a[i].ls+1),ansr^=1ll*i*(a[i].rs+1); printf("%lld %lld",ansl,ansr); return 0; }
分类:
笔记
标签:
二叉搜索树(BST)
, 笛卡尔树
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具