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:我在干活啊! ...
随机推荐
- 《Maven实战》(许晓斌)导读(读书笔记&第二次读后感)
第一章 Maven简介 Maven是构建工具,但同时还是jar包管理工具.项目信息管理工具 与Make.Ant比较,更为先进 第二章 Maven的安装和配置 Windows和Unix上安装都很简单,下 ...
- MVC、MVP和MVVM的图示
一.MVC MVC模式的意思是,软件可以分成三个部分. 视图(View):用户界面. 控制器(Controller):业务逻辑 模型(Model):数据保存 各部分之间的通信方式如下. View 传送 ...
- python 关于一个懒惰和非懒惰的
>>> pa = re.compile(r'<.*>') >>> result = pa.findall('<H1>title</H1 ...
- 【PostgreSQL-9.6.3】使用pg_settings表查看参数的生效条件
PostgreSQL数据库的配置参数都在postgresql.conf文件中,此文件的目录为数据库的数据目录($PGDATA).这些参数有些是直接修改就可以生效,有些需要重启数据库才能生效,而有些根本 ...
- Windows离线安装Python第三方库的方法
在window中,离线安装第三方模块, 1.下载第三方库的压缩文件,解压,将解压后的文件放到Python安装目录下的Lib\site_packages中 2. 将Python添加到环境变量里 3.进入 ...
- 【转】WITH AS 用法
转载自:http://blog.csdn.net/shaochao14/article/details/6223052 一.WITH AS的含义 WITH AS短语,也叫做子查询部分(subquery ...
- java如何区分同时继承的父类和实现的接口中相同的方法
基类代码: public class Father { public Father() { System.out.println("基类构造函数{"); show(); Syste ...
- Container Views
https://developer.apple.com/documentation/uikit/views_and_controls Container Views Organize and pres ...
- CAD多个点构造选择集(网页版)
主要用到函数说明: IMxDrawSelectionSet::SelectByPolygon 在多个点组合的闭合区域里,构造选择集.详细说明如下: 参数 说明 [in] IMxDrawPoints* ...
- JavaScipt30(第七个案例)(主要知识点:数组some,every,findIndex方法)
承接上文,这是第7个案例,这个案例没什么说的,主要有三个注意点: 附上项目链接: https://github.com/wesbos/JavaScript30 // 1. slice(begin, e ...