Loading

摘要: 题意 给定一个长度为 \(n\) 的序列(\(1 \le n \le 2 \times 10 ^ 7\)),对于每组询问 \([l, r]\),找到其区间最大值,并进行累加。 思路 \(n\) 太大,不能用 ST 表/线段树,考虑以下表为键值,数值为优先级建出笛卡尔树。 对于左右两个端点 \([l, 阅读全文
posted @ 2024-08-23 17:44 SunnyYuan 阅读(2) 评论(0) 推荐(0) 编辑
摘要: 题意 输入 \(n\) 个数字,按照顺序将这 \(n\) 个数字插入 BST,在保证 BST 的结构不变的情况下,重排插入顺序,使得其字典序最小。 思路 这个题目很好地利用了笛卡尔树的性质。 我们考虑最后建出来的 BST 的中序遍历一定是 \(1, 2, 3, \cdots , n - 1, n\) 阅读全文
posted @ 2024-08-23 16:43 SunnyYuan 阅读(1) 评论(0) 推荐(0) 编辑
摘要: 题目 思路 我们要充分利用笛卡尔树的性质: 一颗子树内的点表现在数组上都是连续的; 一颗子树内的点的大小都大于等于子树跟的数值大小。 所以我们建出笛卡尔树,用 dfs 求出以每个点为子树的子树大小 \(sz_i\),那么对于这个高度 \(h_i\) 来说,其子节点的高度比它大,所以可以拓展开来,面积 阅读全文
posted @ 2024-08-23 10:56 SunnyYuan 阅读(3) 评论(0) 推荐(0) 编辑
摘要: 笛卡尔树 定义 笛卡尔树每个节点有两种属性,一种是键值,一种是优先级。 一般将位置作为键值,维护 BST 的性质,这样其中序遍历一定为 \(1, 2, 3, \cdots , n - 1, n\)。 一般将数值看作优先级,维护堆的性质。 构建思路 维护一个单调栈,表示现在的右链长度。 我们将数组从前 阅读全文
posted @ 2024-08-23 10:39 SunnyYuan 阅读(1) 评论(0) 推荐(0) 编辑