POJ 2201 Cartesian Tree 【笛卡尔树】

将一维数据(序列)转化为二维数据(图像)的方法汇总GAFS, MTF, Recurrence plot,STFT 虽然深度学习方法(1D CNN, RNN, LSTM 等)可以直接处理一维数据,但是当前的深度学习方法主要还是处理二维结构数据的,特别是在计算机视觉CV以及自然语言处理NLP领域,各种各样的方法层出不穷。因此,如果能够将一维序列数据转化为二维(图像)数据, 则可以直接结合CV以及NLP领域的方法,是不是很有趣! GAF, GASF, GADF, MTF, Recurrence Plot, STFT, 短时傅里叶变换 阅读详情

构造笛卡尔树。

我用的是 排序+左旋 的方式,这种方式并不是最好的构造方式,先写出来再说,今天不行了,改天在学习其他的算法。

构树技巧:增加一个虚拟的根节点,根节点的value优先级最高,可以保证此节点一直是根节点。


这道题目的数据有点……,所以不需要判断不合法的,所有的数据都可以构成笛卡尔树,所以判断NO的就可以省了。。。。⊙﹏⊙b汗



排序+左旋:

#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;

struct node {
    int key, value, idx, lson, rson, fa;
} a[50005];
struct renode {
    int fa, lson, rson, idx;
} b[50005];
int n;

bool cmp_key(const node &x, const node &y) {
    return x.key < y.key;
}
bool cmp_value(const node &x, const node &y) {
    return x.value < y.value;
}
void Insert(int now) {
    int j = now - 1;
    while (a[j].value > a[now].value) j = a[j].fa;
    a[now].lson = a[j].rson;
    a[a[j].rson].fa = now;
    a[j].rson = now;
    a[now].fa = j;
}
int main() {
    while (scanf("%d", &n) == 1) {
        for (int i=1; i<=n; i++) {
            scanf("%d %d", &a[i].key, &a[i].value);
            a[i].lson = a[i].rson = a[i].fa = 0;
            a[i].idx = i;
        }
        bool flag = true;
        sort(a+1, a+1+n, cmp_value);
        for (int i=1; i<n; i++)
            if (a[i].value == a[i+1].value) {
                flag = false;
                break;
            }
        if (!flag) {
            printf("NO\n"); continue;
        }
        sort(a+1, a+1+n, cmp_key);
        for (int i=1; i<n; i++)
            if (a[i].key == a[i+1].key) {
                flag = false;
                break;
            }
        if (!flag) {
            printf("NO\n"); continue;
        }

        a[0].lson = a[0].rson = a[0].fa = 0;
        a[0].value = -0x3f7f7f7f;
        a[0].idx = 0;

        for (int i=1; i<=n; i++) Insert(i);
        printf("YES\n");
        for (int i=1; i<=n; i++) {
            b[a[i].idx].fa = a[a[i].fa].idx;
            b[a[i].idx].lson = a[a[i].lson].idx;
            b[a[i].idx].rson = a[a[i].rson].idx;
        }
        for (int i=1; i<=n; i++)
            printf("%d %d %d\n", b[i].fa, b[i].lson, b[i].rson);
    }
    return 0;
}


【深度学习时间序列预测案例】零基础入门经典深度学习时间序列预测项目实战(附代码+数据集+原理介绍) 本专栏整理了《深度学习时间序列预测案例》,内包含了各种不同的基于深度学习模型的时间序列预测方法,例如LSTM、GRU、CNN(一维卷积、二维卷积)、LSTM-CNN、BiLSTM、Self-Attention、LSTM-Attention、Transformer等经典模型,包含项目原理以及源码,每一个项目实例都附带有完整的代码+数据集。 阅读详情

相关推荐

GD32F303驱动WS2812B灯带:用TIMER+PWM+DMA解放CPU,实现流畅灯效(附完整代码)

本文详细介绍了基于GD32F303的TIMER+PWM+DMA全自动控制方案,用于高效驱动WS2812B灯带。通过硬件外设协同工作,该方案不仅解放了CPU资源,还能实现复杂的灯光效果,如渐变、流水等。文章提供了完整的代码实现和性能优化技巧,适合嵌入式开发者参考。

weixin_42561143的博客 380

笛卡尔树(Cartesian Tree)

笛卡尔树是一种特定的二叉树数据结构,由数组存储。在范围最值、范围top k查询方面广泛应用。树中的元素满足二叉搜索树性质,要求按照中序遍历得到的序列为原数组序列树中节点满足堆性质,节点的key值要大于其左右子节点的key值当按照index从1到n(或者从0到n-1)的顺序将数组中的每个元素插入到笛卡尔树中时,当前要被插入的元素的index值最大,因此根据二叉搜索的性质需要沿着当前已经完成的笛卡尔树的根的右子树链搜索。由于笛卡尔树要满足堆的性质。.........

Hacket_Xu的博客 3520

手把手教你用Verilog实现MDIO控制器(附完整VHDL代码对比)

本文详细介绍了如何使用Verilog实现MDIO控制器,并提供了与VHDL实现的深度对比。通过解析MDIO协议核心要点,展示Verilog状态机架构设计和关键时序控制逻辑,同时对比VHDL在信号声明、状态机实现和双向端口处理上的差异。适用于以太网硬件设计开发者,帮助掌握MDIO控制器自主实现能力。

weixin_30682415的博客 422

笛卡尔树简介(分类到treap里面)

笛卡尔树结构由Vuillmin在解决范围搜索的几何数据结构问题时提出的,从数列中构造一棵笛卡尔树可以线性时间完成,需要采用基于栈的算法来找到在该数列中的所有最近小数。由此可知,笛卡尔树是一种特定的二叉树数据结构,可由数列构造,在范围最值查询、范围top k查询(range top k queries)等问题上有广泛应用。它具有堆的有序性,中序遍历可以输出原数列。 目 录 1

crazy_石头的专栏 2258

Spring WebFlux响应式编程实战(三):优雅处理异常与高效调试技巧

本文深入探讨了Spring WebFlux响应式编程中的异常处理与调试技巧。文章通过电商订单流处理场景,详细解析了Reactor核心操作符onErrorReturn、onErrorResume和onErrorMap的实战应用,并介绍了如何构建@ControllerAdvice和WebExceptionHandler全局异常处理防线。同时,提供了使用.log()操作符、Hooks.onOperatorDebug()及BlockHound进行高效调试的方法,旨在帮助开发者构建健壮、可维护的响应式应用。

weixin_29252171的博客 67

FlowPic实战:从流量到图像的端到端加密应用识别

本文深入解析了FlowPic技术如何将网络流量转化为图像,并利用CNN模型进行端到端加密应用识别。该方法通过分析数据包大小和时序信息生成流量图像,有效绕过加密内容,实现对视频、聊天、文件传输等应用的精准分类。文章提供了从流量抓取、图像生成到轻量级CNN模型设计与训练的完整实战指南,并探讨了在VPN、Tor等复杂场景下的应用与挑战。

weixin_29046035的博客 151

笛卡尔树详解

笛卡尔树

xinchendahai123的博客 1529

华为昇腾云平台适配Baichuan2大模型记录

文件发现报错:ValueError: The pipeline stage 2 in auto_parallel_context is not equal to the pipeline_stage 1 in the config.run_baichuan2_7b.yaml`,发现默认设备数是16卡,对应的pipeline_stage为2,但实际是8卡,那就改成下面的试试看。,将Baichuan2_7B_Chat.ckpt文件复制进去,将。点击镜像管理,突然发现有个2_2_0,赶紧新建了一个,成功。

羊城迷鹿的博客 2393

笛卡尔树 (Cartesian Tree)

笛卡尔树是一种兼具二叉搜索树和堆性质的二叉树,它能将数组下标与数值大小建立映射关系。其核心价值包括:1)将区间最值查询(RMQ)转化为最近公共祖先(LCA)问题;2)高效解决直方图最大矩形等"左右延伸"类问题;3)揭示Treap平衡树的本质。通过单调栈可实现O(N)线性构建,相比单调栈能持久化结构关系,支持树形DP等高级操作。笛卡尔树还是实现理论最优RMQ算法(O(N)预处理+O(1)查询)的关键桥梁,通过转化为LCA问题再转为±1 RMQ问题来实现。

lifallen的博客 863

【自然语言处理】情感分析(一):基于 NLTK 的 Naive Bayes 实现

朴素贝叶斯(Naive Bayes)分类器可以用来确定输入文本属于某一组类别的概率。例如,预测评论是正面的还是负面的。它是 “朴素的”,它假设文本中的单词是独立的(但在现实的自然人类语言中,单词的顺序传达了上下文信息)。尽管有这些假设,但朴素贝叶斯在使用少量训练集预测类别时具有很高的准确性。

Data · Model · Agent · Repeat 2173

手把手教你学Simulink——基于通信协议与标准的场景实例:卫星通信中的网络安全协议(IPSec)仿真

随着卫星通信在国防、金融、应急指挥、能源管网等关键领域的广泛应用,其安全性已成为系统设计的核心要求。然而,卫星链路具有广播特性、长距离传输、地面站分布广等特点,极易遭受窃听、篡改、重放、中间人攻击等网络威胁。传统的“信任链路层安全”已不足以应对现代网络攻击。为此,国际标准组织(如IETF、ETSI、CCSDS)推荐在卫星通信中部署协议,实现端到端的数据机密性、完整性、身份认证和抗重放保护。本文将手把手教你如何在中构建一个符合标准的仿真系统,涵盖从明文传输到加密隧道的完整安全链路建模。本文完整实现了。

MHD0815的博客 149

POJ 2201 Cartesian Tree 笛卡尔树

题目: 笛卡尔树:笛卡尔树中的每个节点有两个数据域k,a,对于数据域k,满足二叉搜索树性质,对于数据域a,满足最小堆性质。 给出N个节点,1 解题思路: 首先,根据N个节点,肯定可以构造出一颗笛卡尔树。 方法1:  递归法  (经过验证,该方法会超时) (见代码1.) a) 对节点数组,选出a值最小的节点,该节点为根节点 b) 以根节点的k值为枢纽对数组进行划分,小于k的节点位于根

路漫漫其修远兮,吾将上下而求索 2740

【AUTOSAR-DCM】-3.1-将CDD导入CFG并查看$22服务配置变化(UDS诊断DID带一个Data)

案例背景:(共8页精讲) 在《【UDS诊断描述文件CDD】-3.2-编辑CDD给$22服务创建一个带一个Data的DID(dataIdentifier)数据标识符》中,适应使用CANdela Studio在CDD中创建一个带一个Data的DID(dataIdentifier)数据标识符,见图0-1。现在我们将该CDD文件导入到CFG(DaVinci Configurator),看看配置会发生哪些变化。 图0-1 目录 1 将诊断描述文件CDD导入CFG(DaVinci Configurator.

「汽车电子助手」的博客 1633

poj2201Cartesian Tree(笛卡尔树)

Cartesian Tree Time Limit: 10000MS   Memory Limit: 65536K Total Submissions: 2950   Accepted: 1122 Case Time Limit: 2000MS Description Let us consider a special type

ophunter的专栏 1605

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

POJ 2201:Cartesian Tree ← 笛卡尔树模板题

本题是笛卡尔树的模板题。 ●笛卡尔树是由一系列不同数字构成的二叉树。笛卡尔树满足堆的性质,笛卡尔树的中序遍历序列为构建其的原始序列。最小堆笛卡尔树表示满足小根堆性质的笛卡尔树。 ● 笛卡尔树的结点有两个属性:键值 val、优先级 pri。其中,键值 val 预设,优先级 pri 随机或预设。 ●笛卡尔树可由数列构造,在区间最值查询、区间 topK 查询(range top k queries)等问题上有广泛应用。

hnjzsyjyj的专栏 847

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

poj 2201 Cartesian Tree 笛卡尔树

→题目链接← 【想说的话】 谁能告诉我笛卡尔树有什么妙的用处啊.... 【题解】 裸笛卡尔树 笛卡尔树的定义题中已经说的挺完整的了 建树时,先把所有的点以key从小到大排序,然后从前往后插入到树中 具体实现方法为:从根节点开始扫,当找到一个点满足val[x]大于val[now]并且val[x的右儿子]小于val[now](假设我们维护的是大根堆)时,就把【now】的父

everlasting的博客 463

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

POJ-2201 Cartesian Tree【笛卡尔树】

题目链接:http://poj.org/problem?id=2201 题目大意: 让你构造一棵笛卡尔树。 笛卡尔树的节点含有2个值,1个key,一个value,其中key是主键,value是辅键。一棵笛卡尔树就是:key升序,value升序或者降序。类似堆。 与treap的区别是:treap的value是随机值,是为了使树更加平衡引进的,而笛卡尔树的value是一个确定的值。 结构完全

飘过的小牛 3856

POJ 2201 Cartesian Tree 笛卡尔树裸题加讲解

题目:http://poj.org/problem?id=2201题意:给出一个n,在给出n对数(且命名为x,y),构建一棵树,满足以下条件: 对树上任意一个节点,有x > leftson_x 且x > rigthson_x 对树上任意一个节点,有y > father_y 构建完成后,输出每个点的父节点,左子节点,右子节点,没有的以0代替思路:笛卡尔树模板题。笛卡尔树每个节点有两个值,且称为val和

弱智就要多努力 718

POJ-2201 Cartesian Tree(笛卡尔树)

笛卡尔树是一棵二叉树,树的每个节点有两个值,一个为key,一个为value。光看key的话,笛卡尔树是一棵二叉搜索树,每个节点的左子树的key都比它小,右子树都比它大;光看value的话,笛卡尔树有点类似堆,根节点的value是最小(或者最大)的,每个节点的value都比它的子树要大。#include <iostream> #include <cstdio> #include <algorithm>

L. 381

POJ 2201 Cartesian Tree ——笛卡尔树

【题目分析】 构造一颗笛卡尔树,然后输出这棵树即可。 首先进行排序,然后用一个栈维护最右的树的节点信息,插入的时候按照第二关键字去找,找到之后插入,下面的树成为它的左子树即可。 然后插入分三种情况讨论(最下面,中间,成为了新的树根) 【代码】 #include <cstdio> #include <cstring> #include...

weixin_33670713的博客 171

POJ 2201 Cartesian Tree (笛卡尔树)

裸笛卡尔建树。 #include #include #include #include using namespace std; struct node { int key,value,id; bool operator < (const node &cmp)const { return key<cmp.key; } }sa

Jinx Jinx again 809

POJ 2201: Cartesian Tree 笛卡尔树

Cartesian Tree Time Limit: 10000MS   Memory Limit: 65536K Total Submissions: 3893   Accepted: 1551 Case Time Limit: 2000MS Description Let us consider a special

BlackJack 516

[poj2201]Cartesian Tree(笛卡尔树)

题目链接:http://poj.org/problem?id=2201 就是给你key和value,建出笛卡尔树。感觉笛卡尔树的建树过程真的优美,按key排序后,每次插入一个点,相当于从根一直向右走的路径上,找到value小于当前点value,并且value最大的点,插入即可,具体看代码吧。 区分笛卡尔式和treap:两者都有key和value,都既满足二叉搜索树的性质,也满足堆的性质,但tr...

weixin_34342578的博客 169

POJ - 2201 Cartesian Tree(笛卡尔树-单调栈/暴跳父亲)

题目链接:点击查看 题目大意:给出n个节点的key和val,构造出其笛卡尔树的原型 笛卡尔树的定义: 所谓笛卡尔树,就是将给定的n个二元组(key,val)建成一棵树。使得: 如果只关注key,那么这是一棵二叉搜索树 如果只关注val,那么这是一个堆 对于任意三个节点fa,ls,rs,满足: key[ls]<key[fa]<key[rs] val[fa]>=ma...

Falcon的博客 722

POJ-2201-Cartesian Tree(笛卡尔树)

Description Let us consider a special type of a binary search tree, called a cartesian tree. Recall that a binary search tree is a rooted ordered binary tree, such that for its every node x the fol

青春无悔 1963
上一篇: POJ 1785 Binary Search Heap Construction 【笛卡尔树构造,线段树RMQ(Range Max/Min Query)】
下一篇: POJ 1470 Closest Common Ancestors
wwwiskey
博客等级 码龄17年 112粉丝 118原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值