Problem 平衡树 SBT

题目大意

  维护一个序列,支持两种操作。

  操作一:插入一个数。

  操作二:询问第k小的数。

解题分析

  ~~刷刷水题,再熟悉一下splay的基本操作。

  ps:哇咔咔,有连续四天的假期了,好开心~~

参考程序

 #include <bits/stdc++.h>
using namespace std; struct node{
int v,sz;
node *l,*r,*f;
node(int v_=,int sz_=,node* f_=NULL,node* l_=NULL,node* r_=NULL)
{
v=v_; sz=sz_; l=l_; r=r_; f=f_;
}
}*rt; inline void pushup(node *x)
{
x->sz=;
if (x->l) x->sz += x->l->sz;
if (x->r) x->sz += x->r->sz;
}
void left(node* x,node* &rt)
{
node *y=x->f , *z=y->f;
if (y==rt) rt=x; else
if (y==z->l) z->l=x; else z->r=x;
x->f=y->f; y->f=x; if (x->l) x->l->f=y; y->r=x->l; x->l=y;
pushup(y); pushup(x);
}
void right(node* x,node* &rt)
{
node *y=x->f , *z=y->f;
if (y==rt) rt=x; else
if (y==z->l) z->l=x; else z->r=x;
x->f=y->f; y->f=x; if (x->r) x->r->f=y; y->l=x->r; x->r=y;
pushup(y); pushup(x);
}
void splay(node* x,node* &rt)
{
while (x!=rt)
{
node *y=x->f , *z=y->f;
if (y==rt)
if (x == y->l) right(x,rt); else left(x,rt);
else
if (y == z->l)
if (x == y->l) {right(y,rt);right(x,rt);}
else {left(x,rt);right(x,rt);}
else
if (x == y->r) {left(y,rt);left(x,rt);}
else {right(x,rt);left(x,rt);}
}
} void insert(int v,node* &x,node* f)
{
if (x==NULL)
{
x=new node(v,,f);
splay(x,rt);
return;
}
if (v < x->v) insert(v,x->l,x); else insert(v,x->r,x);
} int query(int k,node *x)
{
int num=x->l?x->l->sz:;
if (k==num+) return x->v;
if (k<num+) return query(k,x->l);
return query(k-num-,x->r);
}
void search(node *x)
{
if (x==NULL) return;
cout<<x->v<<" "<<x->sz;
if (x->l) cout<<" lson:"<<x->l->v;
if (x->r) cout<<" rson:"<<x->r->v;
cout<<endl;
if (x->l) search(x->l);
if (x->r) search(x->r); }
int main()
{
int n;
rt=NULL;
scanf("%d",&n);
for (int i=;i<=n;i++)
{
//search(rt);
char s[]; int x;
scanf("%s%d",s,&x);
if (s[]=='I') insert(x,rt,NULL); else cout<<query(x,rt)<<endl;
}
}

Hihocoder 1337 (splay)的更多相关文章

  1. Hihocoder 1329 平衡树·Splay(平衡树)

    Hihocoder 1329 平衡树·Splay(平衡树) Description 小Ho:小Hi,上一次你跟我讲了Treap,我也实现了.但是我遇到了一个关键的问题. 小Hi:怎么了? 小Ho:小H ...

  2. 【hihocoder 1329】平衡树·Splay(Splay做法)

    [题目链接]:http://hihocoder.com/problemset/problem/1329 [题意] [题解] 插入操作:-,记住每次插入之后都要把它放到根节点去就好; 询问操作:对于询问 ...

  3. Hihocoder 1333 (splay)

    Problem 平衡树 splay2 题目大意 维护一个序列,支持四种操作: 操作1:添加一个数,编号为x,权值为y. 操作2:删除编号在区间[x,y]内的数. 操作3:将编号在区间[x,y]内的数的 ...

  4. Hihocoder 1329(splay)

    Problem 平衡树 Splay 题目大意 维护一个数列,支持三种操作. 操作1:添加一个数x. 操作2:询问不超过x的最大的数. 操作三:删除大小在区间[a,b]内的数. 解题分析 和上一题相比, ...

  5. Hihocoder 1325 (splay)

    Problem 平衡树 Treap 题目大意 维护一个数列,支持两种操作. 操作1:添加一个数x. 操作2:询问不超过x的最大的数. 解题分析 尝试了一下用指针来写splay,感觉写起来还是比较流畅的 ...

  6. hihocoder 1677 翻转字符串 splay

    时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 给定一个字符串S,小Hi希望对S进行K次翻转操作. 每次翻转小Hi会指定两个整数Li和Ri,表示要将S[Li..Ri]进行 ...

  7. 【hihocoder 1329】 平衡树·Splay(set做法)

    [题目链接]:http://hihocoder.com/problemset/problem/1329 [题意] [题解] 因为一开始是空的树,所以; n其实就代表了树中的最多元素个数; 则最坏的情况 ...

  8. 【BBST 之伸展树 (Splay Tree)】

    最近“hiho一下”出了平衡树专题,这周的Splay一直出现RE,应该删除操作指针没处理好,还没找出原因. 不过其他操作运行正常,尝试用它写了一道之前用set做的平衡树的题http://codefor ...

  9. hihocoder#1333 : 平衡树·Splay2 (区间操作)

    题面: #1333 : 平衡树·Splay2 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 小Ho:好麻烦啊~~~~~ 小Hi:小Ho你在干嘛呢? 小Ho:我在干活啊! ...

随机推荐

  1. Pycharm初始创建项目和环境搭建(解决aconda库文件引入不全等问题)

    1.新建工程 1.选择新建一个Pure Python项目,新建项目路径可以在Location处选择. 2.Project Interpreter部分是选择新建项目所依赖的python库,第一个选项会在 ...

  2. 源码阅读之LinkedHashMap(JDK8)

    概述 LinkedHashMap继承自HashMap,实现了Map<K,V>接口.其内部还维护了一个双向链表,在每次插入数据,或者访问.修改数据时,会增加节点.或调整链表的节点顺序.以决定 ...

  3. boxworld开发日记2019-6-8

    打算做一个类似RimWorld的游戏,这里记录一下历程.首先,简单回顾一下. 2018年12月23日  场景管理,打算使用四叉树,后来发现四叉树在空间组织和内存占用方面并不占优势,之后计划使用地图分块 ...

  4. 编写UI自动化测试用例原则

    1.一个脚本是一个完整的场景,从用户登陆操作到用户退出系统关闭浏览器.2.一个脚本脚本只验证一个功能点,不要试图用户登陆系统后把所有的功能都进行验证再退出系统3.尽量只做功能中正向逻辑的验证,不要考虑 ...

  5. LN : leetcode 53 Maximum Subarray

    lc 53 Maximum Subarray 53 Maximum Subarray Find the contiguous subarray within an array (containing ...

  6. HTML5 页面调用微信接口

    参考微信微信官方文档JS_SDK:https://mp.weixin.qq.com/wiki/7/aaa137b55fb2e0456bf8dd9148dd613f.html#JSSDK.E4.BD.B ...

  7. Angular——单页面与路由的使用

    单页面 SPA(Single Page Application)指的是通单一页面展示所有功能,通过Ajax动态获取数据然后进行实时渲染,结合CSS3动画模仿原生App交互,然后再进行打包(使用工具把W ...

  8. CAD实现文档坐标到视区坐标的转换(com接口Delphi语言)

    1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 3 ...

  9. Redis系列(三)--消息队列、排行榜等

    Redis命令执行生命周期: 发送命令--->排队(单线程)--->执行命令--->返回结果 慢查询: 只是针对命令执行阶段 慢查询日志通过一个固定长度的FIFO queue,这个q ...

  10. java虚拟机(九)--常用jvm参数

    1.-Xms20M: 表示设置JVM启动内存的最小值为20M,必须以M为单位 2.-Xmx20M: 表示设置JVM启动内存的最大值为20M,必须以M为单位.将-Xmx和-Xms设置为一样可以避免JVM ...