FHQtreap(我有个绝妙的理解方法,但课的时间不够[doge])
FHQtreap板子(P1486 [NOI2004] 郁闷的出纳员)
会了FHQ,treap什么的就忘了吧......
#include<bits/stdc++.h>
using namespace std;
struct FHQ
{
int v,w,size,l,r;
}t[300005];
int root,k,n,_min,tot,add,x,y,ans,cnt;
char ch;
int newnode(int k)
{
++tot;
if(!root)root=1;
t[tot].size=1,t[tot].v=k,t[tot].w=rand();
return tot;
}
void update(int now)
{
t[now].size=t[t[now].l].size+t[t[now].r].size+1;
}
int merge(int x,int y)
{
if(!x||!y)return x+y;
if(t[x].w<t[y].w)
{
t[x].r=merge(t[x].r,y);
update(x);
return x;
}
else
{
t[y].l=merge(x,t[y].l);
update(y);
return y;
}
}
void split(int now,int val,int &x,int &y)
{
if(!now){x=y=0;return;}
if(t[now].v<val)
{
x=now;
split(t[now].r,val,t[now].r,y);
}
else
{
y=now;
split(t[now].l,val,x,t[now].l);
}
update(now);
}
void change(int now,int k)
{
if(!now)return;
t[now].v+=k;
change(t[now].l,k);
change(t[now].r,k);
}
int find(int now,int k)
{
if(t[t[now].l].size==k-1)return now;
if(t[t[now].l].size>k-1)return find(t[now].l,k);
if(t[t[now].l].size<k-1)return find(t[now].r,k-t[t[now].l].size-1);
}
void pp()
{
cout<<root<<endl;
for(int i=1;i<=tot;i++) cout<<setw(2)<<i<<' ';
cout<<endl;
for(int i=1;i<=tot;i++) cout<<setw(2)<<t[i].v<<' ';
cout<<endl;
for(int i=1;i<=tot;i++) cout<<setw(2)<<t[i].l<<' ';
cout<<endl;
for(int i=1;i<=tot;i++) cout<<setw(2)<<t[i].r<<' ';
cout<<endl;
for(int i=1;i<=tot;i++) cout<<setw(2)<<t[i].size<<' ';
cout<<endl<<endl;
}
int main()
{
srand(114514);
cin>>n>>_min;
for(int i=1;i<=n;i++)
{
cin>>ch;
if(ch=='I')
{
cin>>k;
if(k<_min)continue;
split(root,k,x,y);
root=merge(merge(x,newnode(k)),y);
}
if(ch=='A')
{
cin>>k;
change(root,k);
}
if(ch=='S')
{
cin>>k;
change(root,-k);
split(root,_min,x,y);
ans+=t[x].size;
root=y;
}
if(ch=='F')
{
cin>>k;
if(t[root].size<k)
{
cout<<-1<<endl;
continue;
}
cout<<t[find(root,tot-ans-k+1)].v<<endl;
}
///pp();
}
cout<<ans;
return 0;
}
FHQtreap(我有个绝妙的理解方法,但课的时间不够[doge])的更多相关文章
- PHP面向对象编程之深入理解方法重载与方法覆盖(多态)
这篇文章主要介绍了PHP面向对象编程之深入理解方法重载与方法覆盖(多态)的相关资料,需要的朋友可以参考下: 什么是多态? 多态(Polymorphism)按字面的意思就是"多种状态" ...
- springBoot2.0+redis+fastJson+自定义注解实现方法上添加过期时间
springBoot2.0集成redis实例 一.首先引入项目依赖的maven jar包,主要包括 spring-boot-starter-data-redis包,这个再springBoot2.0之前 ...
- 使用DateTime的ParseExact方法实现特殊日期时间的方法详解(转)
本篇文章是对使用DateTime的ParseExact方法实现特殊日期时间的方法进行了详细的分析介绍,需要的朋友参考下 今天遇到一个特别的需求,需要从下面的字符串中转换成一个DateTime对象: [ ...
- 简单粗暴地理解 JavaScript 原型链 (一个充满歪门邪理的理解方法,有助于新手哦!)
原型链理解起来有点绕了,网上资料也是很多,每次晚上睡不着的时候总喜欢在网上找点原型链和闭包的文章看,效果极好. 不要纠结于那一堆术语了,那除了让你脑筋拧成麻花,真的不能帮你什么.简单粗暴点看原型链吧, ...
- PHP面向对象编程——深入理解方法重载与方法覆盖(多态)
什么是多态? 多态(Polymorphism)按字面的意思就是“多种状态”.在面向对象语言中,接口的多种不同的实现方式即为多态.引用Charlie Calverts对多态的描述——多态性是允许你将父对 ...
- js---BOM 的理解方法
windows 方法 window.close(); //关闭窗口 window.alert("message"); //弹出一个具有OK按钮的系统消息框,显示指定的文本 ...
- Java中同步的基本概念监视器–最简单粗暴的理解方法
大学有一门课程叫操作系统,学习过的同学应该都记得,监视器是操作系统实现同步的重要基础概念,同样它也用在JAVA的线程同步中,这篇文章用一种类推的思想解释监视器"monitor". ...
- 排序算法的实现(冒泡,选择,插入 O(N*N)--理解方法实现
以前也看过很多排序算法的原理,每次都想自己实现一下,一直都再拖,现在着牛课网学习算法课程,希望自己能够坚持练习. //对于一个int数组,请编写一个选择冒泡算法,对数组元素排序. //给定一个int数 ...
- 连接字符串中Min Pool Size的理解是错误,超时时间已到,但是尚未从池中获取连接。出现这种情况可能是因为所有池连接均在使用,并且达到了最大池大小。
Min Pool Size的理解是错误的 假设我们在一个ASP.NET应用程序的连接字符串中将Min Pool Size设置为30: <add name="cnblogs" ...
随机推荐
- 【LeetCode】1013. Pairs of Songs With Total Durations Divisible by 60 解题报告(Python)
作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 日期 题目地址:https://leetcode.c ...
- 【LeetCode】1003. Check If Word Is Valid After Substitutions 解题报告(Python)
作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 循环 日期 题目地址:https://leetcod ...
- 【LeetCode】84. Largest Rectangle in Histogram 柱状图中最大的矩形(Python)
作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 单调栈 日期 题目地址: https://leetc ...
- 基于MCRA-OMLSA的语音降噪(二):实现
上篇文章(基于MCRA-OMLSA的语音降噪(一):原理)讲了基于MCRA-OMLSA降噪的原理,本篇讲怎么做软件实现.软件实现有多种方式.单纯看降噪效果可用python,因为python有丰富的库可 ...
- Conditional Generative Adversarial Nets
目录 引 主要内容 代码 Mirza M, Osindero S. Conditional Generative Adversarial Nets.[J]. arXiv: Learning, 2014 ...
- IT6516替代方案|CS5212替代IT6516|CapstoneCS5212
IT6516/IT6516BFN:是一款DP显示端口转VGA转换器的嵌入式MCU单片机. IT6516/IT6516BFN结合DisplayPort接收器和三重DAC,通过转换功能支持DisplayP ...
- CS5211|DP转LVDS |低成本DP to LVDS Conversion 方案设计
目前市面上DP转LVDS转换--DP to LVDS Conversion 方案设计有以下: 龙迅LT8911 LT7211.普瑞PS8625.昆泰CH7511等方案,DP换LVDS转换主要是用在一些 ...
- 使用PyTorch构建神经网络以及反向传播计算
使用PyTorch构建神经网络以及反向传播计算 前一段时间南京出现了疫情,大概原因是因为境外飞机清洁处理不恰当,导致清理人员感染.话说国外一天不消停,国内就得一直严防死守.沈阳出现了一例感染人员,我在 ...
- Unity——基于ShaderLab实现光照系统
这篇主要总结Unity中ShaderLab的着色器代码实现总结,需要有一定图形学基础和ShaderLab基础: 一.着色器 1.顶点片元着色器 分顶点着色器和片元着色器,对应渲染管线的顶点变换和片元着 ...
- 关于PaddleSharp GPU使用 常见问题记录
在安装NVIDIA驱动过程中遇到一系列问题,记录如下! 附上PaddleSharp地址,大家喜欢可以关注 根据PaddleSharp官方说明需要安装驱动如下 CUDA 和 cuDNN 和 Tensor ...