首页 > 其他分享 >笛卡尔树入门

笛卡尔树入门

时间:2023-11-05 12:12:07浏览次数:39  
标签:入门 笛卡尔 ll stk 键值 节点 top

笛卡尔树的定义

笛卡尔树是一种二叉树,每一个结点由一个键值二元组 \((k,w)\) 构成。要求 \(k\) 满足二叉搜索树的性质,而 \(w\) 满足堆的性质。一个有趣的事实是,如果笛卡尔树的 \(k,w\) 键值确定,且 \(k\) 互不相同,\(w\) 互不相同,那么这个笛卡尔树的结构是唯一的。 ——OI wiki

笛卡尔树的构造

排序令 \(k\) 递增,每次插入一个新的节点,我们要使新插入的元素尽量靠右。
在这里我们假设要插入的点为 \((k_u,w_u)\)。

构造步骤:
1、维护一个从根节点开始,每次都向右儿子走的链。这条链可以用栈来维护
2、找到第一个链上的节点 \(x\) 使得 \(w_x\) 比 \(w_u\) 大。
3、i. 若 \(x\) 没有右子树,则将 \(x\) 的右儿子设置为 \(u\)。
3、ii. 若 \(x\) 有右子树,则让 \(u\) 替代 \(x\),并将 \(u\) 的左儿子设置为 \(x\)。

题目

P5854 【模板】笛卡尔树

模板题

代码示例

P5854代码~

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const ll N=10000009;
ll n,p[N];
ll stk[N],top;
ll l[N],r[N];
ll lans,rans;

void input(){
	ios_base::sync_with_stdio(false);
	cin.tie(0);cout.tie(0);
	cin>>n;
}

void solve(){
	for(ll i=1;i<=n;i++){
		cin>>p[i];
		if(top==0){
			stk[++top]=i;
		}
		else if(p[stk[top]]<p[i]){
			r[stk[top]]=i;
			stk[++top]=i;
		}
		else{
			while(p[stk[top]]>p[i]) top--;
			r[stk[top]]=i;
			l[i]=stk[top+1];
			stk[++top]=i;
		}
	} 
	for(ll i=1;i<=n;i++){
		lans^=i*(l[i]+1);
		rans^=i*(r[i]+1);
	}
	cout<<lans<<" "<<rans;
}

int main(){
	input();
	solve();
	return 0;
}

标签:入门,笛卡尔,ll,stk,键值,节点,top
From: https://www.cnblogs.com/lemon-cyy/p/17810383.html

相关文章

  • 【Flutter入门到精通】全网独一份Flutter学习笔记,重磅来袭
    前言随着纯客户端到Hybrid技术,到RN&Weex,再到如今的Flutter技术,客户端实现技术不断前进。在之前的一个APP项目中,因为历史原因当时选择了weex,随着使用的不断深入,我们逐渐发现了weex的渲染性能问题已经成为一个隐患和瓶颈。而Flutter技术的不断成熟和流行,Flutter的良好的跨平台性和......
  • TensorFlow 入门 ---- 手势识别
    原文:https://www.jianshu.com/p/298d8122ca62?utm_campaign=maleskine&utm_content=note&utm_medium=seo_notes&utm_source=recommendation学习笔记来自于何宽大佬的学习笔记本文的相关资料来自于何宽大佬的百度云1-导入TensorFlow库importnumpyasnpimporth5pyimp......
  • python实现手势识别的示例(入门)
    原文:https://pythonjishu.com/yoprvijnxxyihab/手势识别是计算机视觉领域的一个重要研究方向。在实际应用中,手势识别可以被用于人机交互、智能家居控制等领域。在本文中,我们将介绍如何使用Python实现手势识别的示例代码。环境搭建安装Python要使用Python进行手势识别的开发,首......
  • Shell的基本操作和编程入门
    操作:1)给变量赋值,练习echo命令,做下面这个题目:安装中文输入环境:http://rpm.pbone.net  选择第二个,点击右键,复制地址: 按顺序输入下面的命令:     安装完成后,输入zhcon,进入中文输入环境 a)把自己的名字赋值给变量name,把"是"赋值给变量is,把自己的班级名称......
  • x86平台SIMD编程入门(5):提示与技巧
    1、提示与技巧访问内存的成本非常高,一次缓存未命中可能会耗费100~300个周期。L3缓存加载需要40~50个周期,L2缓存大约需要10个周期,即使L1缓存的访问速度也明显慢于寄存器。所以要尽量保持数据结构对SIMD友好,优先选择std::vector、CAtlArray、eastl::vector等容器,按照顺序读取数据......
  • 一、数据结构入门
    “程序(Program)=数据结构(DataStructure)+算法(Algorithm)”数学基础1. 指数指数是幂运算aⁿ(a≠0)中的一个参数,a为底数,n为指数,指数位于底数的右上角,幂运算表示指数个底数相乘。如43=4*4*4一些基本的公式2. 对数在数学中,对数是对求幂的逆运算,正如除法是乘法的倒数,反之亦然。因此,对......
  • 万岳讲堂:抖音小程序开发入门指南
    抖音小程序可以将开发者的创意带入这个热门的应用中。本文将带您深入了解抖音小程序的开发入门指南,帮助您开始在这一平台上构建自己的应用。一、什么是抖音小程序?抖音小程序是一种轻量级的应用程序,它可以在抖音中直接运行,无需用户离开应用即可体验新的功能。 二、工具准备2.1.开发......
  • x86平台SIMD编程入门(4):整型指令
    1、算术指令算术类型函数示例加_mm_add_epi32、_mm256_sub_epi16减_mm_sub_epi32、_mm256_sub_epi16乘_mm_mul_epi32、_mm_mullo_epi32除无水平加/减_mm_hadd_epi16、_mm256_hsub_epi32饱和加/减_mm_adds_epi8、_mm256_subs_epi16最大/最小值_......
  • seo入门基础知识
    推广seo是什么意思怎么做seo,是搜索引擎优化的意思,是在遵循搜索引擎规律的情况下,结合网站进行优化,关键词的布局,内容的相关性做链接,同时需要做好内容与外链,提升网站的用户体验,使得网站在搜索引擎中有个不错的排名,提升提升网站的阅读量。那么企业进行SEO优化的目的是什么呢?其实就是......
  • x86平台SIMD编程入门(3):浮点指令
    1、算术指令算术类型函数示例备注加_mm_add_sd、_mm256_add_ps减_mm_sub_sd、_mm256_sub_ps乘_mm_mul_sd、_mm256_mul_ps除_mm_div_sd、_mm256_div_ps平方根_mm_sqrt_sd、_mm256_sqrt_ps倒数_mm_rcp_ss、_mm_rcp_ps、_mm256_rcp_ps快速计算......