思路:

1. 此处的fhq treap的分裂是按照权值分裂然后插入的。将小于k的分为一棵子树,大于等于k的分为另一棵子树。

2. 删除的时候只要将大于等于min的分裂到以root为根的树中,另一部分不用管,扔掉。

3. 维护一个加标记,注意不要忘记某个地方的pushdown和pushup

其他就是fhq treap的基本操作了

#include<bits/stdc++.h>
using namespace std;
#define ls a[x].l
#define rs a[x].r
const int N = 1e5 + ;
int root, tot, ans;
struct tree{
int l, r, atag, val, dat, siz;
}a[N];
struct fhq_treap{
void newnode(int &x, int val){
a[x = ++tot].dat = rand(); a[x].siz = ; a[x].val = val;
}
void addone(int x, int val){
if(!x) return;
a[x].val += val; a[x].atag += val;
}
void up(int x){
if(!x) return ;
a[x].siz = a[ls].siz + a[rs].siz + ;
}
void down(int x){
if(!x) return;
if(a[x].atag) addone(ls, a[x].atag), addone(rs, a[x].atag);
a[x].atag = ;
}
void Merge(int &x, int l, int r){
if(!l || !r) x = l + r;
else if(a[l].dat < a[r].dat) down(x = l), Merge(rs, rs, r), up(x);
else down(x = r), Merge(ls, l, ls), up(x);
}
void split(int x, int k, int &l, int &r){
if(!x) l = r = ;
else{
down(x);
if(a[x].val < k) l = x, split(rs, k, rs, r);
else r = x, split(ls, k, l, ls);
}
up(x);
}
void ins(int val){
int x;
newnode(x, val);
int l, r;
split(root, val, l, r); Merge(l, l, x); Merge(root, l, r);
}
int getval(int x, int rank){
if(x == ) return -;
down(x);
if(a[rs].siz >= rank) return getval(rs, rank);
if(a[rs].siz + >= rank) return a[x].val;
return getval(ls, rank - a[rs].siz - );
}
void del(int val){
int l;
split(root, val, l, root);
}
}treap;
int n, lim, k;
char ch[];
int main(){
scanf("%d%d", &n, &lim);
while(n--){
scanf("%s%d", ch, &k);
if(ch[] == 'I'){
if(k >= lim) treap.ins(k), ans++;
}
else if(ch[] == 'A') treap.addone(root, k);
else if(ch[] == 'S') treap.addone(root, -k), treap.del(lim);
else printf("%d\n", treap.getval(root, k));
}
printf("%d\n", ans - a[root].siz);
return ;
}

最新文章

  1. ABP源码分析二十一:Feature
  2. SQL TOP 子句、SQL LIKE 操作符、SQL 通配符
  3. 在js中对时间类型格式化字符串
  4. JSP网站开发基础总结《八》
  5. 3种归并操作js代码
  6. python中thread模块中join函数
  7. OpenJudge就算概论-统计字符数
  8. sql server中的decimal或者numeric的精度问题
  9. cxGrid使用汇总1
  10. JsonHelper类(序列化和反序列化辅助类)
  11. jquery 滑动动画
  12. JAVA 数据权限设计
  13. crontab,想说爱你不easy
  14. C语言实现GBK/GB2312/五大码之间的转换(转)
  15. [微信小程序]初试——成绩分析小程序问题总结
  16. 在linux系统中跟踪高IO等待
  17. 香港科技大学的VINS_MONO初试
  18. ARM的GPIO配置
  19. EXCEL解析之终极方法WorkbookFactory
  20. 理解channel 工作原理以及源码

热门文章

  1. 用Python实现多站点运维监控
  2. DNS递归查询与迭代查询
  3. Gradle初使用
  4. Codeforces 552 E. Two Teams
  5. RC电路简介,RC串并联电路的工作原理及应用
  6. Tempter of the Bone HDU 1010(DFS+剪枝)
  7. 互评Alpha版本——可以低头,但没必要——取件帮
  8. 《JavaScript》JS中的跨域问题
  9. C++的反思与总结
  10. input value=&quot;值栈的值&quot;