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" ...
随机推荐
- Spring工具类 非spring管理环境中获取bean及环境配置
SpringUtils.java import org.springframework.beans.BeansException; import org.springframework.beans.f ...
- Protobuf 动态加载 .proto 文件并操作 Message
Google Protocol Buffer 的常规用法需要使用 protoc 将 .proto 编译成 .pb.h 和 .pb.cc,这样做效率非常高,但是耦合性也很高.在某些追求通用性而不追求性能 ...
- Linux C(++)获取可执行程序完整路径
代码 #include <sys/statfs.h> #include <string> #include <iostream> #include <limi ...
- 【LeetCode】714. Best Time to Buy and Sell Stock with Transaction Fee 解题报告(Python & C++)
作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 动态规划 日期 题目地址:https://leetc ...
- P1629八
P1629八 Accepted 标签:[显示标签] 描述 八是个很有趣的数字啊.八=发,八八=爸爸,88=拜拜.当然最有趣的还是8用二进制表示是1000.怎么样,有趣吧.当然题目和这些都没有关 ...
- 警惕!PHP、Node、Ruby 和 Python 应用,漏洞还没结束!
12 月 10 日凌晨,Apache 开源项目 Log4j2 的远程代码执行漏洞细节被公开,作为当前全球使用最广泛的 java 日志框架之一.该漏洞影响着很多全球使用量前列的开源组件,如 Apache ...
- Reflection 基础知识(二)
Proxy 定义 Proxy用于修改对象的某些行为,获取值,设置值等 let p = new Proxy(target, handler); target 用Proxy包装的目标对象(可以是任何类型的 ...
- JSON生成Java实体类
https://www.bejson.com/json2javapojo/new/ 至于效果怎么样,自己试一下就知道了
- MATLAB/SIMULINK生成代码错误之change the default character encoding setting
SIMULINK点击生成C代码报错 错误提示: Error encountered while executing PostCodeGenCommand for model 'RTW_sc3': Cl ...
- pytest动态添加命令行参数并获取(钩子函数:pytest_addoption)
考虑场景: 我们的自动化用例需要支持在不同测试环境运行,有时候在dev环境运行,有时候在test环境运行: 有时候需要根据某个参数不同的参数值,执行不同的业务逻辑: 上面的场景我们都可以通过" ...