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. java 线程开元篇

    学习java的读者都知道,Java的每个对象都会有默认的12个方法,这12个方法分别是 object() finalize() hashCode() equals() wait() wait(long ...

  2. 用Google Cloud Platform搭建***服务教程

    之前FQ一直用的是***,天有不测风云,前几天发现ss服务挂了.更可怕的是ping都ping不通,多方打听,***中文社区已经炸开锅了,原因就是IP被封了.需要付费更换IP.然后到现在还是没有给我更换 ...

  3. 报错:ERROR! The server quit without updating PID file (/usr/local/var/mysql/chenyuntekiMacBook-Air.local.pid).

    在Mac上通过brew install mysql 安装了完mysql 执行mysql.server start 报错:ERROR! The server quit without updating ...

  4. 构建一个.net的干货类库,以便于快速的开发 - 前言

    前言: 工作已经快两年了,项目也做过不少,不知道大家有没有一个习惯,就是把在做项目过程中那些好的方法记录下来.我觉得这个习惯在开发的过程中还是很有用的,举个例子,我之前做过一个支付宝的支付功能,然后把 ...

  5. Modbus通讯协议简介

    Modbus协议简介 Modbus协议最初由Modicon公司开发出来,此协议支持传统的RS-232.RS-422.RS-485和以太网设备,许多工业设备,包括PLC,DCS,智能仪表等都在使用Mod ...

  6. IFormattable,ICustomFormatter, IFormatProvider接口

    定                 义 1.IFormattable   提供一种功能,用以将对象的值格式化为字符串表示形式. 2.IFormatProvider  提供用于检索控制格式化的对象的机制 ...

  7. AVR单片机8位数码管显示的程序实现

    AVR单片机8位数码管显示的程序实现 转载:http://www.sohu.com/a/117255149_119709   2016-10-26 16:30 我们接着来完成 数码管的显示实验.现在我 ...

  8. Masonry 原理与使用说明

    原理: 1)约束生成:MASConstraintMaker: 2)缺省补齐: - (void)setSecondViewAttribute:(id)secondViewAttribute { if ( ...

  9. JavaScipt30(第一个案例)(主要知识点:键盘事件以及transitionend)

    今天得到一个github练习项目,是30个原生js写成的小例子,麻雀虽小五脏俱全,现在记录一下第一个. 第一个是键盘按键时页面上对应的键高亮,同时播放音频,松开后不再高亮. 我自己实现了一下,然后查看 ...

  10. 01Microsoft SQL Server

    Microsoft SQL Server Microsoft SQL Server 是Microsoft 公司推出的关系型数据库管理系统.具有使用方便可伸缩性好与相关软件集成程度高等优点,可跨越膝上型 ...