笛卡尔树

2024/4/12 5:19:11

笛卡尔树区间查询最值

#include<cstdio> #include<iostream> #include<algorithm> #include<cmath> #include<cstring> #include<stack> using namespace std; int a[105],n; int fa[105],ls[105],rs[105];int build() {stack<int> st; //存放节点的key值…

2019牛客暑期多校训练营(第一场),A题(笛卡尔树)

题意转换过来之后大概就是建立两个数组a[n].b[n]的笛卡尔树&#xff0c;并求出这两棵笛卡尔树从key1开始能够同构的最大子树。 代码如下&#xff1a; #include<cstdio> #include<iostream> #include<algorithm> #include<cstring> #include<stack&…

【YBT2023寒假Day12 B】仰望星空(DP)(线段树)(笛卡尔树)

仰望星空 题目链接&#xff1a;YBT2023寒假Day12 B 题目大意 有一个 n*n 的网格&#xff0c;第 i 列下面的 ai 个点都是障碍。 然后又一些不是障碍的地方有特殊点&#xff0c;删掉它有费用。 要你用最小费用使得不存在两个特殊点在一个矩阵中且矩阵中没有障碍。 思路 注意…

CF 1178 F1

题意&#xff1a;n个格子&#xff0c;编号1~n&#xff0c;n种颜色的油漆 &#xff0c;编号1~n&#xff0c;每次依次选第i种颜色并将一段区间内全部涂成颜色i&#xff0c;区间内颜色被覆盖&#xff0c;可以涂色的前提是这一区间是相同的颜色&#xff0c;所以你可以认为最初n个格…

O(n)RMQ四毛子

有一种ST表&#xff0c;叫做1ST表 这种ST表可以在 O ( n ) O(n) O(n) 的时刻内完成建树 其本质就是分块&#xff0c;大块为整除的ST表&#xff0c;小块的差分数组种类不多&#xff0c;完全可以预处理 现在考虑推广到普通的ST表里 我们发现我们真正关心的是数之间的大小关系…

1167 Cartesian Tree(37行代码+详细注释)

分数 30 全屏浏览题目 切换布局 作者 陈越 单位 浙江大学 A Cartesian tree is a binary tree constructed from a sequence of distinct numbers. The tree is heap-ordered, and an inorder traversal returns the original sequence. For example, given the sequence …

[校内模拟]字符串

Description 定义一个字符串S的权值f(S)为&#xff0c;其所有不同后缀两两的LCP的最大值 给出一个字符串S&#xff0c;每个位置有权值ai m次询问&#xff0c;每次询问给出[l,r,x]&#xff0c;求一个[l,r]的子区间[a,b]&#xff0c;满足f(S[a,b])>x&#xff0c;且max(ai)最小…

洛谷P1440 求m区间内的最小值(RMQ/笛卡尔树)

题意&#xff1a;一个含有n项的数列(n<2000000)&#xff0c;求出每一项前的m个数到它这个区间内的最小值。若前面的数不足m项则从第1个数开始&#xff0c;若前面没有数则输出0。 RMQ代码如下&#xff1a; #include<cstdio> #include<iostream> #include<cs…

笛卡尔树模板

笛卡尔树是一种特定的二叉树数据结构&#xff0c;可由数列构造&#xff0c;在范围最值查询、范围top k查询&#xff08;range top k queries&#xff09;等问题上有广泛应用。它具有堆的有序性&#xff0c;中序遍历可以输出原数列。 //引自百度百科 关于笛卡尔树的构造&#xf…

C++ 笛卡尔树

目录 一、性质二、构建笛卡尔树三、应用四、源码 一、性质 堆性质&#xff1a; 笛卡尔树是一种满足堆性质的树。每个节点包含两个值&#xff1a;键值&#xff08;key&#xff09;和优先级值&#xff08;priority&#xff09;。在笛卡尔树中&#xff0c;根节点的优先级值最大&am…

笛卡尔树总结

笛卡尔树的key值满足二叉搜索树&#xff0c;value满足小根堆 线性构造尝试&#xff1a;按照key从小到大排序&#xff0c;维护最右链的单调栈&#xff0c;每次从底开始从上比较&#xff0c;找到一个比当前加入点的value小的点v为之&#xff0c;把v的右儿子挂在自己的左侧&#x…