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" ...
随机推荐
- [源码解析] PyTorch 分布式之弹性训练(2)---启动&单节点流程
[源码解析] PyTorch 分布式之弹性训练(2)---启动&单节点流程 目录 [源码解析] PyTorch 分布式之弹性训练(2)---启动&单节点流程 0x00 摘要 0x01 ...
- windows系统中远程登录ubuntu18服务器的桌面
下载:http://www.c-nergy.be/products.html 也可以直接服务器里 wget https://www.c-nergy.be/downloads/xRDP/xrdp-ins ...
- IDEA推荐配置(自动导入包、提示不区分大小写)
设置快捷键方式为eclipse 设置代码提示不区分大小写 自动导入包 可以通过 Ctrl + 鼠标滚轮 来控制代码字体大小显示 显示行号和显示区分方法线 代码一行显示不下,软分行显示,点击鼠标右键 增 ...
- 在制造业的工业2.0中应用MOM系统
介绍 什么是制造运营管理 (MOM) 系统和 IT 架构的最佳实践? 行业专家对制造类型和供应网络有何建议? 管理思维和企业文化是否因不断变化的全球市场而过时? MOM 技术是否过于昂贵,IT 架构是 ...
- Python obj与JSON相互转换
1 # _*_ coding:utf-8 _*_ 2 3 def showJson(self, pipefd): 4 overdict = args.__dict__ 5 # 此时就可以用json.d ...
- 1137 - Expanding Rods
1137 - Expanding Rods PDF (English) Statistics Forum Time Limit: 0.5 second(s) Memory Limit: 32 M ...
- 重重封锁,让你一条数据都拿不到《死磕MySQL系列 十三》
在开发中有遇到很简单的SQL却执行的非常慢,甚至只查询一行数据. 咔咔遇到的只有两种情况,一种是MySQL服务器CPU占用率很高,所有的SQL都执行的很慢直到超时,程序也直接502,另一种情况是行锁造 ...
- Unity——ShaderLab基础
1.格式 Shader "Custom/MyShader" //命名+右键创建shader路径 { //属性必须在代码里声明才能使用 Properties{ //属性,会出现在in ...
- MATLAB 设置示波器颜色和行列
设置颜色 设置行列和图例 放大缩小显示
- 不用下载Axure RP Extension for Chrome插件查看原型文件的方法
Axure RP Extension for Chrome是一款谷歌插件,主要可以用来查看原型文件.以前安装插件的时候总是找半天资源,很麻烦,最近发现了一种新方法可以不用下载插件资源.其实在原型文件中 ...