LGP5854 [LG TPLT] 笛卡尔树 学习笔记

news/2025/2/24 15:34:17/文章来源:https://www.cnblogs.com/OrinLoong/p/18717857

LGP5854 [LG TPLT] 笛卡尔树 学习笔记

Luogu Link

题意简述

给定一个长为 \(n\) 的排列 \(p\),以 \(i\) 为键,\(p_i\) 为值构建 \(p\) 中所有元素的笛卡尔树。

做法解析

定义“右链”为从根开始一直往右儿子走形成的一条链。
因为我们照键从小到大的顺序插入每一个元素,所以我们在插入到元素 \((i,p_i)\) 时,其一定不是任何结点的左儿子,也就是说其一定在右链上。我们在右链从下往上找到第一个值大于 \(p_i\) 的元素 \(u\),然后让 \(i\) 成为 \(u\) 的右儿子,把 \(u\) 的原右子树,也就是“右链”被 \(u\) 截下来的部分作为 \(u\) 的左子树。

pEKRE7Q.png

发现右链上的 \(p_i\) 有单调性,于是用单调栈维护右链的值,这样时间复杂度得到保证 \(O(N)\)

代码实现

#include <bits/stdc++.h>
using namespace std;
namespace obasic{typedef long long lolo;template <typename _T>void readi(_T &x){_T k=1;x=0;char ch=getchar();for(;!isdigit(ch);ch=getchar())if(ch=='-')k=-1;for(;isdigit(ch);ch=getchar())x=(x<<3)+(x<<1)+ch-'0';x*=k;return;}template <typename _T>void writi(_T x){if(x<0)putchar('-'),x=-x;if(x>9)writi(x/10);putchar(x%10+'0');}
};
using namespace obasic;
const int MaxN=1e7+5;
int N,W[MaxN],stk[MaxN],ktp;
int ls[MaxN],rs[MaxN];lolo ans1,ans2;
int main(){readi(N);for(int i=1;i<=N;i++)readi(W[i]);for(int i=1;i<=N;i++){int k=ktp;while(k&&W[stk[k]]>W[i])k--;if(k)rs[stk[k]]=i;if(k<ktp)ls[i]=stk[k+1];stk[++k]=i,ktp=k;}for(int i=1;i<=N;i++)ans1^=1ll*i*(ls[i]+1);for(int i=1;i<=N;i++)ans2^=1ll*i*(rs[i]+1);writi(ans1),putchar(' '),writi(ans2);return 0;
}

反思总结

这道题键是下标所以直接顺着插就行了,否则要先把元素照键排个序。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/884606.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

11.4.3 凸目标的收敛性分析

式\((11.47)\)应该有误,不等号左边还应该有一个项\(-E[||x_T-x^{*}||^2]\),之所以没写估计是因为认为\(x_T\)非常接近\(x^{*}\),所以可以忽略;另外不等号右边的括号打错了,应该是 \[2\underset{t=1}{\overset{T}{\sum}}\eta_tE[R(x_t)]-2S_1R^*-S_2L^2 \],其中\(S_1=\und…

AGC053C 题解

Solution 前面部分略,相信别的题解写得很详细。 本题解集中解释 \(p(d)\) 的计算。 \(p(d)\) 表示对于 \(\forall A_i\),\(B_1\cdots B_{i+d}\) 中有比它大的数。 那么这么考虑,已经加入 \(A_1 \cdots A_{i-1}\)。对于 \(A_i\) ,如果大于 \(\min(A_1 \cdots A_{i-1},B_1 \c…

使用word模板的科研论文编写

编写SCD论文等的时候,可能出现官网的论文模板不够全面.一般我们使用latex作为论文编写模板,格式等都方便控制和编写,而word模板操作起来较为复杂.但是官网有些时候可能找不到latex的模板内容,不得不使用word模板.word的样式模板等功能十分好用,但是官网的模板不一定有那么好的格…

k8sPV、PVC、StorageClass存储状态(20250216)

k8s:PV、PVC、StorageClass存储状态(2025/02/16) 所谓容器的 Volume,其实就是将一个宿主机上的目录,跟一个容器里的目录绑定挂载在了一起 PV与PVC长啥样,有什么用 PV 描述的,是持久化存储数据卷,由运维人员事先创建在 Kubernetes 集群里待用的 apiVersion: v1 kind: Persis…

09 集合框架详解

前言 java集合框架主要包括两种类型的容器,一种是集合,存储一个元素集合(Collection),另一种是图(Map),存储键/值对映射java集合简介 一、集合简介 java集合可分为Set、List、Queue和Map四种体系。 set代表无序、不可重复的集合 List代表有序、重复的集合 而Map则代表具有…

leetcode hot 04

解题思路:暴力解法直接遍历一遍,但是最后两个点超时;解决方法用单调栈的方式进行解决,栈存储的是下标,当某一天的温度值比栈顶的温度高的时候,就把栈顶元素弹出,并且在对应answer填入两者下标差值,然后继续对比,直到空栈或者栈顶元素比该天温度高,将该下标存入栈中,…

xilinx A7 启动慢 SPI*1改SPI*4

xilinx 启动慢 SPI*1改SPI*4SPI1大概8秒,SPI4大概2秒, 有两步操作: 1.改xdc配置文件加上一下语句 set_property BITSTREAM.CONFIG.SPI_BUSWIDTH 4 [current_design]2.生成bit文件的语句修改 原始生成bit文件语句 write_cfgmem -force -format bin -interface SPIx1 -size 1…

土地规划与交通网络的整合:共绘城市发展的经纬脉络

在现代城市化的洪流中,土地规划与交通网络如同城市的经纬,共同织就了城市的繁荣与发展蓝图。本文旨在深入探讨如何巧妙地将交通网络规划整合到土地利用规划之中,以期达到空间高效、出行便捷、环境友好的城市规划目标。一、前言:土地规划与交通网络的共生逻辑城市土地规划是…

土地法规与政策的最新动态:引领规划设计新方向

在快速发展的社会经济背景下,土地作为稀缺资源,其规划与管理日益成为国家治理与可持续发展的重要议题。作为土地规划设计人员,及时掌握最新的土地法规与政策动态,不仅是专业素养的要求,更是推动项目合规、高效落地的关键。本文将深入解析近期我国土地法规与政策的若干重要…

土地开发项目的经济评估:解锁可行性分析的金钥匙

在城市化进程加速的今天,土地开发项目不仅关乎城市的面貌变迁,更直接影响着经济的持续健康发展。作为土地规划领域的专业人士,准确评估项目的经济可行性,是决定项目成功与否的首要步骤。本文旨在深入探讨如何系统地进行土地开发项目的经济评估,为决策者和规划工程师提供一…

18-PHP常见漏洞之代码审计

1、sql注入漏洞中,常见的防护方案有哪些?请简述原理和用法类型转换(数字型) 原理:将输入内容强制转换为整数或浮点来防止SQL注入 常用函数:intval($input)floatval()floor()(int)$input$input + 0 以intval函数为例,用法如下: <?php /*强制类型转换*/ $id=intval($…