这道题写法和之前差不多 但是fhqtreap在加点的时候为了同时维护大根堆以及二叉排序树的性质所以插入时也要注意分裂

fhqteap需要判断指针是否为空 不然就会re 这个我调了很久

#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
const int M=;
int read(){
int ans=,f=,c=getchar();
while(c<''||c>''){if(c=='-') f=-; c=getchar();}
while(c>=''&&c<=''){ans=ans*+(c-''); c=getchar();}
return ans*f;
}
int n,m,sum,mn,leave,delta;
struct node{
node *l,*r;
int sz,v,rnd;
void init(int w){sz=; v=w; rnd=rand();}
void up(){
sz=;
if(l) sz+=l->sz;
if(r) sz+=r->sz;
}
void split(node*&lw,node*&rw,int w){
if(!this){lw=; rw=; return ;}
if(w<=v){
l->split(lw,l,w);
rw=this;
}
else{
r->split(r,rw,w);
lw=this;
}
up();
}
int find(int rank){
if(!this) return ;
int ls=l?l->sz:;
if(ls+==rank) return v;
else if(ls>=rank) return l->find(rank);
else return r->find(rank-ls-);
} }tr[M],*rt;
node* merge(node*a,node*b){
if(!a) return b;
if(!b) return a;
if(a->rnd>b->rnd){
a->r=merge(a->r,b);
a->up();
return a;
}{
b->l=merge(a,b->l);
b->up();
return b;
}
}
int main()
{ char ch[];
int w;
n=read(); mn=read();
while(n--){
scanf("%s",ch); w=read();
if(ch[]=='I'&&w>=mn){
tr[++sum].init(w-delta);
node *p1,*p2;
rt->split(p1,p2,w-delta);
rt=merge(merge(p1,tr+sum),p2);
}
if(ch[]=='A') delta+=w;
if(ch[]=='S'){
node *p;
delta-=w; rt->split(p,rt,mn-delta);
if(p) leave+=p->sz;
}
if(ch[]=='F'){
if(!rt||w>rt->sz) { printf("-1\n"); continue;}
printf("%d\n",rt->find(rt->sz-w+)+delta);
}
}
printf("%d\n",leave);
return ;
}

最新文章

  1. Python-匿名函数
  2. 学习PYTHON之路, DAY 7 - PYTHON 基础 7 (面向对象基础)
  3. java设计模式之命令模式
  4. 开发环境python
  5. Nginx-限制汇总
  6. 如何重置CentOS 7的Root密码?设置CentOS 7的Root密码的方法与步骤
  7. jQuery对表单、表格的操作及更多应用(下:其他应用)
  8. CountDownLatch的原理学习
  9. xargs 加 gm批量转换图片
  10. 【Visual C++】Windows GDI贴图闪烁解决方法
  11. SQL中的DML、DDL以及DCL
  12. Java在线考试系统(含源码)
  13. Microsoft宣布为Power BI提供AI模型构建器,关键驱动程序分析和Azure机器学习集成
  14. [Python] networkx入门 转
  15. Mybatis insert时返回自增id
  16. Problem B: 平面上的点——Point类 (II)
  17. 解题:EXNR #1 金拱门
  18. express中的会话存储方式
  19. ajax 把返回结果作为参数传递
  20. Netty源码分析第1章(Netty启动流程)----&gt;第2节: NioServerSocketChannel的创建

热门文章

  1. Win10启动不了的问题处理记录
  2. 『AngularJS』ngShow
  3. MySQL☞create语句
  4. HDFS伪分布式
  5. 教你如何用Docker快速搭建深度学习环境
  6. windowsserver2008 重新启动计算机命令
  7. php+Mysql中网页出现乱码的解决办法详解
  8. scp源码浅析
  9. Linux挂载Win共享文件夹 一
  10. IntellIJ IDEA 配置 Git,顺带解决Git Push rejected问题