FHQ Treap模版(luogu P3369)

2024-09-07 20:52
文章标签 luogu 模版 p3369 treap fhq

本文主要是介绍FHQ Treap模版(luogu P3369),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

FHQ Treap模版(自用),带注释

#include<bits/stdc++.h>
using namespace std;
const int N=1e5+10;int n,root,idx;struct node{int l,r;int val,key,size;
}tr[N];int getnew(int v){tr[++idx].val=v;//权值tr[idx].key=rand();//堆的随机值tr[idx].size=1;return idx;
}void pushup(int u){tr[u].size=tr[tr[u].l].size+tr[tr[u].r].size+1;//更新大小,一定不要忘了+1
}void split(int u,int v,int &x,int &y){//按值分裂if(!u){x=y=0;return;}if(tr[u].val<=v){//u的左子树全部满足<=v,所以去判断右子树x=u;split(tr[x].r,v,tr[x].r,y);pushup(x);}else{//原理同上y=u;split(tr[y].l,v,x,tr[y].l);pushup(y);}
}int merge(int x,int y){//满足x中所有节点val值小于y中val值if(!x||!y) return x+y;if(tr[x].key<tr[y].key){//合并操作按key值,注意tr[x].r=merge(tr[x].r,y);//把权值小的放在上面,满足堆的性质pushup(x);return x;}else{tr[y].l=merge(x,tr[y].l);pushup(y);return y;}
}void insert(int v){int x,y,z;split(root,v,x,y);z=getnew(v);root=merge(merge(x,z),y);
}void del(int v){int x,y,z;split(root,v,x,z);split(x,v-1,x,y);//最终的y节点权值全部为vy=merge(tr[y].l,tr[y].r);//删除一个值为v的节点root=merge(merge(x,y),z);
}int getrank(int v){//查询v的排名int x,y;split(root,v-1,x,y);int ans=tr[x].size+1;root=merge(x,y);//分裂完别忘了合并return ans;
}int getval(int u,int k){//查询排名为k的数if(k==tr[tr[u].l].size+1) return tr[u].val;//类似二分查找的方式else if(k<=tr[tr[u].l].size) return getval(tr[u].l,k);else return getval(tr[u].r,k-tr[tr[u].l].size-1);
}int getpre(int v){//查询v的前驱int x,y;split(root,v-1,x,y);int ans=getval(x,tr[x].size);root=merge(x,y);return ans;
}int getnxt(int v){int x,y;split(root,v,x,y);int ans=getval(y,1);root=merge(x,y);return ans;
}int main(){scanf("%d",&n);while(n--){int opt,x;scanf("%d %d",&opt,&x);if(opt==1) insert(x);else if(opt==2) del(x);else if(opt==3) printf("%d\n",getrank(x));else if(opt==4) printf("%d\n",getval(root,x));else if(opt==5) printf("%d\n",getpre(x));else printf("%d\n",getnxt(x));}return 0;
}

这篇关于FHQ Treap模版(luogu P3369)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1146131

相关文章

模版方法模式template method

学习笔记,原文链接 https://refactoringguru.cn/design-patterns/template-method 超类中定义了一个算法的框架, 允许子类在不修改结构的情况下重写算法的特定步骤。 上层接口有默认实现的方法和子类需要自己实现的方法

机器学习:opencv图像识别--模版匹配

目录 一、模版匹配的核心概念 1.图片模板匹配是一种用于在图像中查找特定模式或对象的技术。 2.模板图像 3.目标图像 4.滑动窗口 5.相似度度量 6.匹配位置 二、模版匹配的步骤 1.准备图像: 2.预处理: 3.匹配: 4.定位最佳匹配: 5.标记结果: 6.显示或处理结果: 三、代码实现 一、模版匹配的核心概念 1.图片模板匹配是一种用于在图像中查

推荐适合中秋的SVG模版(第III期)

宝藏模版 往期推荐(点击阅读): 趣味效果|高大上|可爱风|年终总结I|年终总结II|循环特效|情人节I|情人节II|妇女节|儿童节I|儿童节II|儿童节III|618I|618II|父亲节|丝滑动画|端午节I|端午节II|滑动妙用|图片轮播I|图片轮播II|又红又专|中秋节I|中秋节II|双十一I|双十一II|世界杯|圣诞节|新年|兔年春节|元宵节|愚人节|杂志范儿|520/521I|520

HTB-bike(SSTI模版注入)

前言 大家好,我是qmx_07,今天给大家讲解bike靶场 渗透过程 信息搜集 服务器开放了 22 ssh 和 http80端口 Wappalyzer 介绍:Wappalyzer是一种浏览器扩展程序,用于识别正在访问的网站所使用的技术栈和工具,比如使用的web框架,编程语言等 服务器所使用Express框架 发现SSTI模版注入 可以看到这个输入框,用来输出 内容尝试x

Idea中修改Jsp文件的头部注释模版

文章目录 方法1,启动idea,单击“file”,选择“settings”2,选择Editor——File and Code Templates——other——Jsp files——jsp File.jsp。此时编辑如下图所示的右上区域即可修改模板。 每天学一个小技巧 方法 1,启动idea,单击“file”,选择“settings” 2,选择Editor

模版匹配——在大量的图片中找到与模版相似的图像

传统的特征匹配算法: 通过opencv自带的matchtemplate方法识别发现对形变、旋转的效果不是很好,后来尝试利用orb特征、sift特征匹配,由于车辆很多特征很相似,也不能很好的区分,如利用sift特征匹配效果如下: 代码: import shutilimport cv2import numpy as npimport osdef calculate_match_score(

CString、String(标准模版…

原文地址:CString、String(标准模版库)、string(C语言)区别和联系----1---5 作者:蓝色的思念 STring与CSTring的区别和联系 CString:MFC里面封装的类。主要应用在MFC和ATL程中          主要数据类型有char(应用于ANSI),wchar_t(unicode),TCHAR(ANSI与unicode均可);

策略模式+模版方法模式+简单工厂模式混用优化代码复杂分支问题

说明 这篇博客是在复杂场景使用策略和工厂模式代替分支语句升级版,增加了模版方法模式。将支付类的公共逻辑抽取到模板类中,使整个支付逻辑更加灵活,进一步优化了代码结构,提升了软件的可维护性和可读性。 流程图如下 先看一遍流程再对一下代码就能很深刻理解了。 代码具体改造 1、首先新增模版方法 public abstract class AbstractPaymentStrategy i

【C++标准模版库】模拟实现容器适配器:stack、queue、priority_queue(优先级队列)

stack和queue 一.容器适配器1.什么是适配器 二.模拟实现stack和queue三.STL标准库中stack和queue的底层结构四.deque(双端队列)的简单介绍五.deque作为stack和queue的默认容器的原因六.priority_queue(优先级队列)的介绍和使用七.priority_queue的模拟实现1.前置:仿函数的介绍2.模拟实现3.关于堆的算法 八.栈和队

c++中的匿名对象及内存管理及模版初阶

c++中的匿名对象 A a;//a的生命周期在整个main函数中a.Sum(1);//匿名对象生命周期只有一行,只有这一行会创建对象,出了这一行就会调析构A().Sum(1);//只有这一行需要这个对象,其他地方不需要。return 0; 日期到天数的转换  计算日期到天数转换_牛客题霸_牛客网根据输入的日期,计算是这一年的第几天。 保证年份为4位数且日期合法。 进阶:时。题目来