首页 > 其他分享 >【模板】FHQtreap

【模板】FHQtreap

时间:2024-10-24 12:32:20浏览次数:7  
标签:lc int FHQtreap rc merge siz root 模板

mt19937 rnd(time(0));
struct FHQtreap{
	int lc[N],rc[N],val[N],key[N],siz[N],pool,root;
	int create(int x){
		int p=++pool;
		val[p]=x;
		siz[p]=1;
		key[p]=rnd();
		lc[p]=rc[p]=0;
		return p;
	}
	void update(int p){
		if(!p)return;
		siz[p]=siz[lc[p]]+siz[rc[p]]+1;
	}
	void split(int p,int d,int &x,int &y){
		if(!p){
			x=y=0;
			return;
		}
		if(val[p]<=d){
			x=p;
			split(rc[p],d,rc[p],y);
		}
		else{
			y=p;
			split(lc[p],d,x,lc[p]);
		}
		update(p);
	}
	int merge(int x,int y){//val[x]<val[y]
		if(x==0||y==0)return x^y;
		if(key[x]>key[y]){
			rc[x]=merge(rc[x],y);
			update(x);
			return x;
		}
		else{
			lc[y]=merge(x,lc[y]);
			update(y);
			return y;
		}
	}
	void insert(int d){
		int x,y;
		split(root,d-1,x,y);
		root=merge(merge(x,create(d)),y);
	}
	void remove(int d){
		int x,y,z;
		split(root,d,x,z);
		split(x,d-1,x,y);
		if(y){
			y=merge(lc[y],rc[y]);
		}
		root=merge(merge(x,y),z);
	}
	int rank(int d){
		int x,y,ret;
		split(root,d-1,x,y);
		ret=siz[x]+1;
		root=merge(x,y);
		return ret;
	}
	int kth(int k){
		int p=root;
		while(siz[lc[p]]+1!=k){
			if(siz[lc[p]]>=k)p=lc[p];
			else{
				k-=siz[lc[p]]+1;
				p=rc[p];
			}
		}
		return val[p];
	}
	int pre(int d){
		int x,y,p;
		split(root,d-1,x,y);
		p=x;
		while(rc[p])p=rc[p];
		root=merge(x,y);
		return val[p];
	}
	int nxt(int d){
		int x,y,p;
		split(root,d,x,y);
		p=y;
		while(lc[p])p=lc[p];
		root=merge(x,y);
		return val[p];
	}
}T;

标签:lc,int,FHQtreap,rc,merge,siz,root,模板
From: https://www.cnblogs.com/chenhx-xcpc/p/18499355

相关文章

  • 【.Net】【C#】Program.cs通用代码模板
    【.Net】【C#】WebCoreApi通用代码模板常用NuGetProgram.csappsettings.jsonlog4net.config常用NuGetMicrosoft.Extensions.Logging.Log4Net.AspNetCoreFlurlFlurl.HttpProgram.csusingSystem.Reflection;usingMicrosoft.AspNetCore.Mvc;usingMicrosoft.......
  • SpringBoot poi-tl通过模板占位符生成word文件
    简介:        开发中我们需要通过在word中使用占位符来动态渲染一些数据,本文讲解poi-tl实现动态生成word文档,包括表格循环,对象嵌套。1.word格式这是我的test.word这是导出后的out.docx文件2.依赖首先pom.xml导入依赖 <dependency> <groupId>org.apa......
  • XCPC模板
    !!!声明:本人自用模板,谨慎使用,比赛中出现bug概不负责。`BigInt`高精度整数(不含负数)structBigInt{std::vector<char>v;BigInt(intx=0):v{}{dov.push_back(x%10);while(x/=10);}BigInt(std::string&x):v{}{assert(siz......
  • 如何在后台修改网站名称?如何修改网站底部模板?
    修改网站名称登录后台管理系统使用管理员账号登录网站的后台管理系统。进入网站设置导航到网站的基本设置或全局设置页面。修改网站名称找到“网站名称”或“站点标题”等相关字段。输入新的网站名称并保存更改。确认修改访问前台页面,检查网站名称是否已......
  • VBA代码按模板批量新建Excel工作簿&自动填充单元格信息(2.0)
    <<<<接续投稿的1.01.代码①用于将模板复制到新建工作簿中,代码②用于将源文件(即新建工作簿所需名单所在的那个文件,也是粘贴代码的那个文件)。因此,完成“按模板批量与自动填充信息”这一操作需要准备三个文件。(文件命名没有严格要求,在操作过程中统一即可,图片中仅作演示)(1)——>......
  • 模板复习计划
    进度模板SPFA(不带负环)FloydDijkstra拓扑排序-[已完成]单调栈单调队列Trie树KMP线性乘法逆元线性任意n个数乘法逆元-[已完成]线段树2带负环的SPFAexgcdTarjan找强连通分量差分约束康托展开网络......
  • 二叉树路径问题模板总结
    二叉树路径问题模板总结文章目录二叉树路径问题模板总结问题分类1、自顶向下257.二叉树的所有路径112.路径总和113.路径总和II437.路径总和III面试题04.12.求和路径998.从叶节点开始的最小字符串2、非自顶向下543.二叉树的直径124.二叉树中的最大路径和687.最长同值路径......
  • Spring Boot 替换Word模板生成Word文件教程
    ......
  • 网站php模板怎么修改?
    备份现有文件在开始修改之前,先备份现有的模板文件,以防止意外情况发生。可以使用FTP工具将文件下载到本地进行备份。确定需要修改的文件找到需要修改的PHP模板文件。通常这些文件位于网站的模板目录中,例如 templates 或 views 文件夹。常见的文件扩展名包括 .php......
  • 测试题目的输入输出模板喵
    测试题目的输入输出模板目录测试题目的输入输出模板目录你可能会用到的代码A-看看你会不会用电脑B-求求你不要用内置函数C-GPAD-minE-for循环大神F-居然有人说这个是线性代数G-高三同学秒了H-无穷级数I-不要用内置函数......