首页 > 其他分享 >【数据结构】【模板】笛卡尔树

【数据结构】【模板】笛卡尔树

时间:2024-08-23 10:38:24浏览次数:13  
标签:笛卡尔 int top stk i64 键值 数据结构 模板

笛卡尔树

定义

笛卡尔树每个节点有两种属性,一种是键值,一种是优先级。

一般将位置作为键值,维护 BST 的性质,这样其中序遍历一定为 \(1 ~ n\)。

一般将数值看作优先级,维护堆的性质。

构建思路

维护一个单调栈,表示现在的右链长度。

我们将数组从前往后插入笛卡尔树。

对于第 \(i\) 个数,我们将比其大的数字从栈顶弹出,将 \(i\) 接在栈顶元素的右儿子上,将刚刚弹出的元素接在左儿子上(不破坏其结构)。

代码

P5854 代码

#include <bits/stdc++.h>

using namespace std;
using i64 = long long;

const int N = 10000010;

int n, a[N];
int lc[N], rc[N];
int stk[N], top;

int main() {
    ios::sync_with_stdio(false);
    cin.tie(nullptr);

    cin >> n;
    for (int i = 1; i <= n; i++) cin >> a[i];
    for (int i = 1; i <= n; i++) {
        int k = top;
        while (k && a[stk[k]] > a[i]) k--;
        if (k) rc[stk[k]] = i;
        if (k < top) lc[i] = stk[k + 1];
        stk[++k] = i;
        top = k;
    }

    i64 ans1 = 0, ans2 = 0;
    for (int i = 1; i <= n; i++) {
        ans1 = ans1 ^ (1ll * i * (lc[i] + 1));
        ans2 = ans2 ^ (1ll * i * (rc[i] + 1));
    }
    cout << ans1 << ' ' << ans2 << '\n';
    return 0;
}

标签:笛卡尔,int,top,stk,i64,键值,数据结构,模板
From: https://www.cnblogs.com/Yuan-Jiawei/p/18375492

相关文章

  • 数据结构-时间、空间复杂度-详解
    数据结构-时间复杂度-详解1.前言1.1数据结构与算法1.2如何衡量一个算法的好坏1.3复杂度2.时间复杂度2.1是什么2.2大O符号只保留最高阶项不带系数常数次为`O(1)`2.3示例示例2.1示例2.2示例2.3示例2.42.4题目3.空间复杂度3.1是什么3.2大O符号3.3示例示例1示例2示例3示......
  • C++模板的细节改进
    emsp;emsp;C++11改进了编译器的解析规则,尽可能的将多个右尖括号(>)解析称模板参数结束符,方便我们编写模板相关的代码。1.模板的右尖括号emsp;emsp;在C++98/03的泛型编程中,模板实例化有一个很繁琐的地方,那就是连续两个右尖括号(>>)会被变异器解释称右移操作符,而不是模板参数表的结束......
  • 数据结构--链表(单向链表--有头链表、无头链表)链表的插入、删除、修改、查找
    什么是链表?链表是一种基本的数据结构,用于存储一组数据元素。与数组不同,链表的元素在内存中并不连续存储。链表由一系列节点组成,每个节点包含以下两个主要部分:1.数据部分:存储节点所包含的数据。2.指针部分:存储指向下一个节点的指针(对于单向链表),或者存储指向前一个节点和下......
  • 数据结构之链表(看不懂你来找我)
    数据结构......
  • 织梦dedecms模板怎么改
    织梦DeDeCMS模板修改是一项常见任务,可以帮助您定制网站的外观和功能。下面是一些基本的步骤和指导,帮助您了解如何修改织梦CMS的模板。1.准备工作备份:在修改模板之前,一定要备份现有的模板文件,以免丢失原始数据。熟悉模板结构:了解织梦CMS模板的基本结构和标签用法。2.修改模......
  • 知识改变命运 数据结构 【二叉树】
    1.树型结构(了解)1.1概念树是一种非线性的数据结构,它是由n(n>=0)个有限结点组成一个具有层次关系的集合。把它叫做树是因为它看起来像一棵倒挂的树,也就是说它是根朝上,而叶朝下的。它具有以下的特点:有一个特殊的结点,称为根结点,根结点没有前驱结点除根结点外,其余结点被分成M......
  • CSharp联合halcon实现模板匹配
    前言1、加载并显示图像功能。2、图像拖动缩放功能。3、绘制ROI:矩形、方向矩形、圆形、椭圆形。4、创建模板:参数修改、模板轮廓显示。5、匹配模板:参数修改、匹配轮廓显示、匹配结果显示。案例实操代码结构HalconModelSet_Ex:该目录空间下存放halcon算子相关模型(......
  • 算法与数据结构——基本数据类型与编码
    基本数据类型基本数据类型是计算机CPU可以直接进行运算的类型,在算法中直接被使用,主要包括以下几种整数类型byte、short、int、long。浮点数类型float、double,用于表示小数字符类型char,用于表示各种语言的字母、标点符号甚至表情符号等。布尔类型bool,用于表示“是”与“否”......
  • F. Expected Median(组合数学,模板)
    题目来源:https://codeforces.com/contest/1999/problem/F//题意:给长度为n的01字符串,求每个长度为k的子序列串(不连续)的中位数总和。//思路:n的范围为2e5,“我也不会非暴力求所有子序列啊”。先理解下什么是中位数吧,就是对于有序的中间数字,奇数就是(k+1)/2。也只有中位数是1的子序列......
  • 【生日视频制作】公园火车飞艇热气球AE模板修改文字软件生成器教程特效素材【AE模板】
    公园火车飞艇热气球生日视频制作教程AE模板修改文字特效软件生成器素材怎么如何做的【生日视频制作】公园火车飞艇热气球AE模板修改文字软件生成器教程特效素材【AE模板】生日视频制作步骤:安装AE软件下载AE模板把AE模板导入AE软件修改图片或文字渲染出视频......