Hihocoder 1337 (splay)
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)的更多相关文章
- Hihocoder 1329 平衡树·Splay(平衡树)
Hihocoder 1329 平衡树·Splay(平衡树) Description 小Ho:小Hi,上一次你跟我讲了Treap,我也实现了.但是我遇到了一个关键的问题. 小Hi:怎么了? 小Ho:小H ...
- 【hihocoder 1329】平衡树·Splay(Splay做法)
[题目链接]:http://hihocoder.com/problemset/problem/1329 [题意] [题解] 插入操作:-,记住每次插入之后都要把它放到根节点去就好; 询问操作:对于询问 ...
- Hihocoder 1333 (splay)
Problem 平衡树 splay2 题目大意 维护一个序列,支持四种操作: 操作1:添加一个数,编号为x,权值为y. 操作2:删除编号在区间[x,y]内的数. 操作3:将编号在区间[x,y]内的数的 ...
- Hihocoder 1329(splay)
Problem 平衡树 Splay 题目大意 维护一个数列,支持三种操作. 操作1:添加一个数x. 操作2:询问不超过x的最大的数. 操作三:删除大小在区间[a,b]内的数. 解题分析 和上一题相比, ...
- Hihocoder 1325 (splay)
Problem 平衡树 Treap 题目大意 维护一个数列,支持两种操作. 操作1:添加一个数x. 操作2:询问不超过x的最大的数. 解题分析 尝试了一下用指针来写splay,感觉写起来还是比较流畅的 ...
- hihocoder 1677 翻转字符串 splay
时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 给定一个字符串S,小Hi希望对S进行K次翻转操作. 每次翻转小Hi会指定两个整数Li和Ri,表示要将S[Li..Ri]进行 ...
- 【hihocoder 1329】 平衡树·Splay(set做法)
[题目链接]:http://hihocoder.com/problemset/problem/1329 [题意] [题解] 因为一开始是空的树,所以; n其实就代表了树中的最多元素个数; 则最坏的情况 ...
- 【BBST 之伸展树 (Splay Tree)】
最近“hiho一下”出了平衡树专题,这周的Splay一直出现RE,应该删除操作指针没处理好,还没找出原因. 不过其他操作运行正常,尝试用它写了一道之前用set做的平衡树的题http://codefor ...
- hihocoder#1333 : 平衡树·Splay2 (区间操作)
题面: #1333 : 平衡树·Splay2 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 小Ho:好麻烦啊~~~~~ 小Hi:小Ho你在干嘛呢? 小Ho:我在干活啊! ...
随机推荐
- spring Cache /Redis 缓存 + Spring 的集成示例
spring Cache https://www.ibm.com/developerworks/cn/opensource/os-cn-spring-cache/ spring+redis 缓存 ht ...
- C#与C++的区别(三) 委托与事件
在C#中没有C++中的函数指针的概念,但是有委托的概念,功能与函数指针类似. C# 委托(Delegate) C# 中的委托(Delegate)类似于 C 或 C++ 中函数的指针.委托(Delega ...
- 10046 trace and sql
1. SQLT 下载 从metalink上下载SQLT工具,参考文档 (以下大部分(SQL可以在sqlt\utl 目录下找到)) 1.1 SQLT 安装 SQLT安装在自己的schema SQLT ...
- Django--2、form表单
django中定义form表单的优势 HTML中提交后,若数据出现错误,返回的页面中仍然可以保留之前输入的数据. 通过校验规则可以方便的限制字段条件并校验. 在Django中建个form表单 先要确定 ...
- Atmel studio 7.0 安装成功
Atmel studio 7.0 安装成功 转载: http://www.eeworld.com.cn/mcu/article_2017112436241.html 2018-07-2610:27 ...
- git删除本地分支失败,报错error: branch 'test219' not found.
错误: 删除本地分支报错,操作如下: git branch -d test219 操作失败,错误信息:error: branch 'test219' not found git branch -D t ...
- Java图片上查找图片算法
之前用按键精灵写过一些游戏辅助,里面有个函数叫FindPic,就是在屏幕范围查找给定的一张图片,返回查找到的坐标位置. 现在,Java来实现这个函数类似的功能. 算法描述: 屏幕截图,得到图A,(查找 ...
- java死锁问题
一.先从定义上了解一下死锁 二.从代码角度上去解释一下死锁问题 三.上述程序就是出现了死锁,我们来查看一下 1.命令如下 cmd>>jps(查看到了死锁线程所在的类,前面是PID) 2 ...
- dbcp数据源配置
<bean id="dbcpDataSource" class="org.apache.commons.dbcp.BasicDataSource" de ...
- 使用CAShapeLayer的path属性与UIBezierPath画出扫描框
1.CAShapeLayer CAShapeLayer具有path属性,(是CGPath对象),可以使用这个属性与UIBezierPath画出想要的图形.该子类根据其fill color和stroke ...