笛卡尔树

笛卡尔树本质是一种 treap,可以线性构建,在构造数据下并不平衡
对于一个排列,其笛卡尔树 dfs 序为下标,其权值满足小(大)根性质
笛卡尔树可以很好地把序列问题转化为树上问题,其好处在于很方便地利用树上左右子树大小进行处理

笛卡尔树与数列的对应关系:

  • 区间 RMQ 对应笛卡尔树上的 LCA
  • 序列上当前值为最大值的区间大小为笛卡尔树上子树大小
  • 笛卡尔树上节点在节点左边的祖先个数为序列上之前大于权值的数的个数

RMQ Similar Sequence

首先,根据前面的性质,比节点大的区间是子树大小
那么恰好相同的概率是 1sizi
一个让人十分震惊的事情是节点的权值期望为 12,于是总和的期望为 n2,于是这题就这样草率的完了

  • 随机选取可以直接让权值期望为 12

SPOJ PERIODNI

一个以前见过的笛卡尔树经典题,这个题中使用笛卡尔树的优势变得非常明显
首先由于题目中说纵向分隔是互不影响的,那么相当于可以像切片一样把序列分成一层一层的小矩形
比如样例,分成 5×12×11×12×1,以及 1×2 的矩形即可
这样可以直接在高度上建立笛卡尔树
考虑笛卡尔树上 dp,进行树形背包
f[i][j] 表示以 i 为根的子树内放置 j 个车的方案数
那么 f[u][i]=f[v][j]×f[u][ij] 这个式子是背包常见形式
一个很关键的是在当前所划分出来的矩形里面放点的方案数
考虑在一个 a×b 的矩形里放 k 个点的方案数为 (ik)(jk)k!
于是在自己做一遍 dp


english

题意:求 l=1nr=ln(alxorar)max(alr)

这道题的本质其实就是构造了一棵笛卡尔树
由于和位运算扯上了关系,那么在笛卡尔树上进行启发式 trie 树合并即可

posted @   y_cx  阅读(131)  评论(0编辑  收藏  举报
编辑推荐:
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
阅读排行:
· 单线程的Redis速度为什么快?
· 展开说说关于C#中ORM框架的用法!
· Pantheons:用 TypeScript 打造主流大模型对话的一站式集成库
· SQL Server 2025 AI相关能力初探
· 为什么 退出登录 或 修改密码 无法使 token 失效
历史上的今天:
2021-08-11 noip模拟36
2021-08-11 noip模拟35
点击右上角即可分享
微信分享提示