无旋treap 文艺平衡树

无旋treap(可持久化,区间操作),解决普通平衡树、文艺平衡树 无旋treap 普通平衡树tyvj1728(treap模板) 如果想看旋转treap怎么写戳这儿 无旋treap代码: #include<bits/stdc++.h> using namespace std; const int N=5e5+5; struct node{ int val,ch[2],size,rd; #define l(x) t[x].ch[0] #define... 阅读详情

    因为需要用到区间修改,所以该用splay(尚未填坑)或者无旋treap(刚刚填上)

     最开始的建树用到了建笛卡尔树的方法,把id大于当前点的点不断出栈,又因为这道题的点是按序入栈的,所以当它无法让更多点出栈时,他就是栈首的右子树,而最后一个出栈的点,就是当前点的左子树。显然root=zhan[1]。

    

#include<stdio.h>
#include<iostream>
#include<cstdlib>
#include<cstring>
#include<cmath>
#define inf 10000000
using namespace std;
int n,m;
struct treap
{
	treap* ch[2];
	int id,h,lazy,size;
	treap(){size=lazy=h=0;id=rand();ch[1]=ch[0]=NULL;}
	inline void update(){size=ch[0]->size+ch[1]->size+1;}
} *null=new treap(),*root=null,*zhan[100005],*x,*last;
typedef pair<treap*,treap*> D;
inline int read()
{
	int sum=0,f=1;char x=getchar();
	while(x<'0'||x>'9'){if(x=='-')f=-1;x=getchar();}
	while(x>='0'&&x<='9'){sum=sum*10+x-'0';x=getchar();}
	return sum*f;
}
inline treap* newtreap(int x)
{
	treap *o=new treap();
	o->size=1;o->h=x;
	o->ch[0]=o->ch[1]=null;
	return o;
}
void push(treap *f)
{
	if(f==null)return;
	if(f->lazy)
	{
		f->lazy^=1;
		if(f->ch[0]!=null)f->ch[0]->lazy^=1;
		if(f->ch[1]!=null)f->ch[1]->lazy^=1;
		swap(f->ch[0],f->ch[1]);
	}
}
D split(treap *f,int k)
{
	if(f==null)return  D(null,null);
	push(f);D y;
	if(f->ch[0]->size>=k)
	    {y=split(f->ch[0],k);f->ch[0]=y.second;f->update();y.second=f;}
	else
	    {y=split(f->ch[1],k-f->ch[0]->size-1);f->ch[1]=y.first;f->update();y.first=f;}    
	return y;
}
treap* merge(treap *a,treap *b)
{
	if(a==null)return b;
	if(b==null)return a;
	push(a);push(b);
	if(a->id<b->id)
	     {a->ch[1]=merge(a->ch[1],b);a->update();return a;}
	else
	     {b->ch[0]=merge(a,b->ch[0]);b->update();return b;}
}
void dfs(treap *x)
{
	if(x==null)return;
	push(x);
	if(x->ch[0]!=null)dfs(x->ch[0]);
	printf("%d ",x->h);
	if(x->ch[1]!=null)dfs(x->ch[1]);
}
int yjn()
{
	 freopen("sph.in","r",stdin);
    freopen("sph.out","w",stdout);
	scanf("%d%d",&n,&m);
	int p=0;
	for(int i=1;i<=n;i++)
	{
		x=newtreap(i);last=null;
		while(p&&zhan[p]->id>x->id)
		{zhan[p]->update();last=zhan[p];zhan[p--]=null;}
		if(p)zhan[p]->ch[1]=x;
		x->ch[0]=last;zhan[++p]=x;
	}
	while(p)zhan[p--]->update();
	root=zhan[1];
	int l,r;
	for(int i=1;i<=m;i++)
	{
		l=read();r=read();
		D x=split(root,r);
		D y=split(x.first,l-1);
		if(y.second!=null)y.second->lazy^=1;
		root=merge(merge(y.first,y.second),x.second);
	}
	dfs(root);
}
int qty=yjn();
int main(){;}

模板 - FHQ - treap 无旋平衡树 整理的算法模板合集: ACM模板 #include<bits/stdc++.h> using namespace std; const int N = 100007; int n, m, tot, root; struct node{ int l, r; int key;//权值 int val;//平衡因子 int size;//子树个数 }tr[N]; void pushup(int p){ tr[p].size = tr[tr[p].l] 阅读详情

相关推荐

史上最简单的平衡树——无旋Treap.pdf

史上最简单的平衡树——无旋Treap.pdf

算法六期-第十课-平衡树-上课笔记(无旋Treap)

Treap树

sarapeng的博客 249

TCGA之GDC-client工具下载安装与使用

文章主要是对GDC-client工具下载TCGA数据库数据整个过程的一个记录 1.下载GDC-client工具 GDC-client工具网址:GDC Data Transfer Tool | NCI Genomic Data Commons (cancer.gov) 我这里下的是上图中红圈中的版本, 2.解压安装 从网上了解的是不能解压到带中文的路径里,解压后是一个.exe文件,为了能直接在cmd命令行下使用,将其加入系统环境: 点击新建之后,输入将文件解压到的路径,然后...

better_strong的博客 1万+

无旋平衡树

无旋平衡树(treap)

weixin_48940571的博客 414

CLion for Mac(m1)配置GCC编译器

条件:电脑已经下载过XCode 一. 下载HomeBrew homebrew是一款macos,linux下的包管理工具,我们需要使用他来下载GCC 下载方法: 1.打开终端(terminal) 2.输入 /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)" ps.有可能会遇到的问题 我当初下载挂了VPN,优快云上还有很多解决问题的方法,可以将错误信

supermario19的博客 7847

高速窄脉冲峰值保持设计

一、目的 在激光探测领域,探测器发出的高速窄脉冲,单片机AD进行采样,很难捕捉到窄脉冲的幅值,即使使用高速AD进行采样,也存在一定的难度。因此,本方案设计了一种高速窄脉冲峰值保持电路,有助于单片机AD采样能很好的捕捉到脉冲幅值。 二、方案分析与比较 峰值保持器一般分为两种:电压型和跨导型。 方案一:电压型峰值保持器,由电压型运放、二极管、保持电容、缓冲器组成,优点是元件成本低,缺点是峰值保持存在过...

weixin_43184208的博客 9295

平衡树之FHQ Treap(无旋)

平衡树——FHQ TreapFHQ\ TreapFHQ Treap(无旋) 学习 fhq Treapfhq\ Treapfhq Treap 之前,要先了解普通的 TreapTreapTreap 是怎么回事。 TreapTreapTreap ,就是 TreeTreeTree 加 HeapHeapHeap 。 它让平衡树上的每一个结点存放两个信息:值和一个随机的索引。其中值满足二叉搜索树的性质,索引满足堆的性质,结合二叉搜索树和二叉堆的性质来使树平衡。这也是 TreapT

m0_53373033的博客 1478

使用buildroot系统的qmake编译QT出现Unknown module(s) in QT: xxxx 的错误解决方法

可以看到,我这里使用的是 qt5base-5.15.2 目录下的qmake,这个qmake只包含了基础的qt模块,而额外添加的qt模块没有包含进去,需要使用。可以看到我这里是有的,如果你跟我一样,模块存在,但是还是报找不到对应模块的错误的话,大概率是跟我一样,用错qmake了,看第二点。在包含 qt5base 目录下查看,是否有对应模块的目录,如果没有的话,需要通过make menuconfig 添加一下。目录下的qmake才可以。

T541132的博客 2490

[洛谷P3391]文艺平衡树

无旋Treap版本。

七代目鸽影 403

FPGA 学习笔记:Vivado 工程更改FPGA 型号

FPGA 学习笔记:Vivado 工程更改FPGA 型号

坚韧与专注 1万+

【35】软考软件设计师——设计模式代码填空(C++版)满分精讲|第5/6题二选一必考

本文是《软件设计师·50讲通关|从零基础到工程师职称》专栏第35篇,聚焦下午选做题**第5/6题C++版设计模式代码填空**,与上一篇Java版形成双子配套,单题分值稳定12~15分。全文超4000字深度拆解C++独有核心考点:虚函数/纯虚函数、构造与析构函数规范、继承权限、模板类编程在设计模式中的应用;精讲单例、工厂、策略、观察者、适配器五大高频模式的C++专属代码写法,标注所有填空核心点位、语法陷阱、内存安全规范

专注于人工智能、软件开发、工控自动化、工厂数字化及智能化等领域,希望和大家共同进步! 544

P3391 【模板】文艺平衡树 (无旋treap)

题目传送门 解题思路 用可以提取区间的平衡树,对区间整体打标记,先不下放,等到操作涉及这个节点时再下放:交换左右儿子并给左右儿子打标记 我用的是无旋treap 刚开始需要建树,建树模仿笛卡尔树,由于所有元素出栈之后自身的儿子不会再有变化,因此出栈的时候再push_up即可,由于栈维护右链,栈顶就是root 要看Splay版本的也可以去这里看>>>Splay版本文艺平衡树...

shadiao.的博客 209

2024届数字IC秋招-华为机试-数字芯片-笔试真题和答案(五)(含2022年和2023年)

此部分包含华为机试真题,方向是数字芯片,内容详细包括设计、验证、后端等,大部分题目给出参考答案。华为机试都是从题库里抽题目,所以这些题目还是很有参考性的,甚至是完全一样,可以搜到的。(题目内容较多,将分开编写几个文章)

qq_42135020的博客 2083

文艺平衡树(Splay)

题目背景 这是一道经典的Splay模板题——文艺平衡树。 题目描述 您需要写一种数据结构(可参考题目标题),来维护一个有序数列,其中需要提供以下操作:翻转一个区间,例如原有序序列是5 4 3 2 1,翻转区间是[2,4]的话,结果是5 2 3 4 1 输入格式 第一行为n,m n表示初始序列有n个数,这个序列依次是(1,2, \cdots n-1,n)(1,2,⋯n−1,n) m表示翻转操作次数 ...

青烟绕指柔的博客 1597

代码复现1——Matterport3d数据集下载

进入“Dataset Download”部分,下载申请书,填写之后发送到指定邮箱(matterport3d@googlegroups.com),之后会收到回信,回信中附有一个download_mp.py的脚本文件。,大小约15G,并不是所有的Mp3d datasets,所有大小约1.3T。下载完成后如下图所示:我这边显示大小为16.1G。

qq_44100524的博客 8054

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

浅尝无旋Treap (基于洛谷P3391 文艺平衡树)

无旋Treap是一种以分裂为基础操作的平衡树类型,本质上还是基于Treap的随机数二叉堆保证平衡,但是其操作却比一般的Treap更加简单,而且功能也更加优秀,能解决一些一般Treap不能解决的问题。...

YunYuanWang的博客 586

IMSL CNL 7.0.0 (x86-64)Crack

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

【模板】文艺平衡树 无旋FHQ Treap

本题并非 #include<iostream> #include<cstdio> #include<algorithm> #include<ctime> using namespace std; int n,leftn,rightn,m; struct node{ node *lson,*rson; int pri;int siz; int val;int mark; void getsize()//获取树的大小 { siz = 1;

Bell的博客 377

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

[Bzoj3223][Tyvj1729] 文艺平衡树(splay/无旋Treap)

题目链接:https://www.lydsy.com/JudgeOnline/problem.php?id=3223 平衡树处理区间问题的入门题目,普通平衡树那道题在维护平衡树上是以每个数的值作为维护的标准,而处理区间问题时,维护平衡树的应该是每个位置的下标,所以平衡树中序遍历时应该是当前区间的样子。例如: {1 2 3 4 5}翻转区间1 3,则中序遍历应该输出{3,2,1,4,5}。 提...

weixin_30436101的博客 103

P3391 【模板】文艺平衡树(@无旋Treap,* *)

其中需要提供以下操作:翻转一个区间,例如原有序序列是 5 4 3 2 1,翻转区间是 [2,4] 的话,结果是 5 2 3 4 1。第一行两个正整数 𝑛,𝑚n,m,表示序列长度与操作个数。序列中第 𝑖i 项初始为 𝑖i。输出一行 𝑛n 个正整数,表示原始序列经过 𝑚m 次变换后的结果。对于 100% 的数据,1≤𝑛,𝑚≤100000,1≤𝑙≤𝑟≤𝑛。接下来 𝑚m 行,每行两个正整数 𝑙,𝑟l,r,表示翻转的区间。您需要写一种数据结构(可参考题目标题),来维护一个有序数列。

Landing_on_Mars的博客 306

【luogu P3391】文艺平衡树(fhq Treap 做法)

给一个数列,会有一些操作,把里面的一个区间翻转。 要你输出最后数列的样子。

欢迎您的光顾awa 212

文艺平衡树(无旋treap)

1 #include<cstdio> 2 #include<cstring> 3 #include<iostream> 4 #include<algorithm> 5 #include<vector> 6 using namespace std; 7 struct NODE{ 8 ...

weixin_30588675的博客 185

BZOJ3223: Tyvj 1729 文艺平衡树 无旋Treap

一开始光知道pushdown却忘了pushup......... #include<cstdio> #include<iostream> #include<cstring> #include<cstdlib> #include<queue> #define MAXN 100010 using namespace std;...

weixin_30662539的博客 75

无旋Treap - BZOJ1014火星人 & 可持久化版文艺平衡树

!前置技能&概念! 二叉搜索树 一棵二叉树,对于任意子树,满足左子树中的任意节点对应元素小于根的对应元素,右子树中的任意节点对应元素大于根对应元素。换言之,就是满足中序遍历为依次访问节点对应元素为升序的二叉树。 平衡树 一棵二叉搜索树,为了防止插入、查询等在朴素二叉搜索树中复杂度为$O(Dep)$的操作在极端数据下会$TLE$,而在操作中不断通过旋转等操作使得树的形态更加平衡...

weixin_30532973的博客 144
上一篇: treap 普通平衡树
下一篇: 离散+二分+前缀和 [NOIP2011] 聪明的质监员
QTY_
博客等级 码龄9年 13粉丝 211原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值