学习了下treap

#include<iostream>
#include<cstdio>
#include<cstdlib>
using namespace std;
const int inf=<<;
int n,mn,root,delta,tot,ans;
int size[],child[][],cnt[],key[],p[];
void update(int x)
{
size[x]=size[child[x][]]+size[child[x][]]+cnt[x];
}
void rotate(int&x,int t)
{
int y=child[x][t];
child[x][t]=child[y][-t];
child[y][-t]=x;
update(x);
update(y);
x=y;
}
void insert(int&x,int k)
{
if(x)
{
if(key[x]==k) cnt[x]++;
else
{
int t=key[x]<k;
insert(child[x][t],k);
if(p[x]<p[child[x][t]]) rotate(x,t);
}
}
else
{
++tot;
x=tot;
p[x]=rand();
// printf("%d\n",p[x]);
key[x]=k;
cnt[x]=;
}
update(x);
}
void erase(int&x,int k)
{
if(key[x]==k)
{
if(cnt[x]>)
{
cnt[x]--;
update(x);
return;
}
if(!child[x][]&&!child[x][])
{
x=;
return;
}
int t=p[child[x][]]>p[child[x][]];
rotate(x,t);
erase(child[x][t^],k);
} else erase(child[x][key[x]<k],k);
update(x);
}
int find(int x,int k)
{
if(k<=size[child[x][]])
return find(child[x][],k);
k-=size[child[x][]]+cnt[x];
if(k<=) return key[x];
return find(child[x][],k);
}
int findrank(int x,int k)
{
if(key[x]==k) return size[child[x][]]+;
if(key[x]<k) return findrank(child[x][],k)+cnt[x]+size[child[x][]];
if(key[x]>k) return findrank(child[x][],k);
}
void findpro(int x,int k)
{
if(x==) return;
if(key[x]<k)
{
ans=key[x];
findpro(child[x][],k);
} else findpro(child[x][],k);
}
void findnxt(int x,int k)
{
if(x==) return;
if(key[x]>k)
{
ans=key[x];
findnxt(child[x][],k);
} else findnxt(child[x][],k);
}
int main()
{
p[]=-inf;
scanf("%d",&n);
while(n--)
{
int opt,a; scanf("%d%d",&opt,&a);
// printf("----------\nopt=%d\n",opt);
if(opt==) insert(root,a);
if(opt==) erase(root,a);
if(opt==) printf("%d\n",findrank(root,a));
if(opt==) printf("%d\n",find(root,a));
if(opt==) {findpro(root,a);printf("%d\n",ans);ans=;}
if(opt==) {findnxt(root,a);printf("%d\n",ans);ans=;}
// printf("----------\n");
}
return ;
}

bzoj3224的更多相关文章

  1. [BZOJ3224]Tyvj 1728 普通平衡树

    [BZOJ3224]Tyvj 1728 普通平衡树 试题描述 您需要写一种数据结构(可参考题目标题),来维护一些数,其中需要提供以下操作:1. 插入x数2. 删除x数(若有多个相同的数,因只删除一个) ...

  2. 【权值线段树】bzoj3224 Tyvj 1728 普通平衡树

    一个板子. #include<cstdio> #include<algorithm> using namespace std; #define N 100001 struct ...

  3. BZOJ3224 洛谷3369 Tyvj 1728 普通平衡树 splay

    欢迎访问~原文出处——博客园-zhouzhendong 去博客园看该题解 题目传送门 - BZOJ3224 题意概括 您需要写一种数据结构(可参考题目标题),来维护一些数,其中需要提供以下操作:1. ...

  4. 【bzoj3224】 Tyvj1728—普通平衡树

    http://www.lydsy.com/JudgeOnline/problem.php?id=3224 (题目链接) 题意 1. 插入x数:2. 删除x数(若有多个相同的数,因只删除一个):3. 查 ...

  5. 【替罪羊树】bzoj3224&luogu3369&cogs1829 [Tyvj 1728]普通平衡树

    [替罪羊树]bzoj3224&luogu3369&cogs1829 [Tyvj 1728]普通平衡树 bzoj 洛谷 cogs 先长点芝士 替罪羊树也是一种很好写的平衡树qwq..替罪 ...

  6. BZOJ3224 Tyvj 1728 普通平衡树(Treap)

    本文版权归ljh2000和博客园共有,欢迎转载,但须保留此声明,并给出原文链接,谢谢合作. 本文作者:ljh2000 作者博客:http://www.cnblogs.com/ljh2000-jump/ ...

  7. [BZOJ3224]普通平衡树(旋转treap,STL-vector)

    3224: Tyvj 1728 普通平衡树 Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 20328  Solved: 8979[Submit][St ...

  8. 【BZOJ3224】普通平衡树(splay)

    题意: 您需要写一种数据结构(可参考题目标题),来维护一些数,其中需要提供以下操作:1. 插入x数2. 删除x数(若有多个相同的数,因只删除一个)3. 查询x数的排名(若有多个相同的数,因输出最小的排 ...

  9. bzoj3224: Tyvj 1728 普通平衡树(平衡树)

    bzoj3224: Tyvj 1728 普通平衡树(平衡树) 总结 a. cout<<(x=3)<<endl;这句话输出的值是3,那么对应的,在splay操作中,当父亲不为0的 ...

  10. [bzoj3224][tyvj1728][普通平衡树] (pb_ds库自带红黑树)

    Description 您需要写一种数据结构(可参考题目标题),来维护一些数,其中需要提供以下操作: 1. 插入x数 2. 删除x数(若有多个相同的数,因只删除一个) 3. 查询x数的排名(若有多个相 ...

随机推荐

  1. 第14章 位图和位块传输_14.4 GDI位图对象(1)

    14.4.1 创建DDB (1)创建 HBITMAP= CreateBitmap(cx,cy,cPlanes,cBitsPixel,lpBits); 参数 说明 cx,cy 指定位图宽度和高度,单位为 ...

  2. Jenkins学习二:Jenkins安装与配置

    安装前关注: Q:应该选择哪个版本的Jenkins? A:如果你是公司正式使用推荐长期支持版(LTS),原因:稳定.如果你是学习,随便哪个版本都可以. Q:JDK应该安装哪个版本的? A:推荐安装JD ...

  3. 项目-基于视频压缩的实时监控系统--tiny6410

    项目-基于视频压缩的实时监控系统--tiny6410 @国嵌linux学习笔记. 1. 构造服务端结构体 server struct server { int epfd; //保存epoll指针 st ...

  4. 用javascript实现html元素的增删查改[xyytit]

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  5. Xcode 编译的哪些错误

    1.error: macro names must be identifiers YourProject_prefix.pch 原因: 因为你弄脏了预处理器宏,在它处于<Multiple Val ...

  6. Java—Servlet开发

    Servlet API中有4个java包: javax.servlet:包含定义Servlet与Servlet容器之间契约的类与接口. javax.servlet.http:包含定义HTTPServl ...

  7. koala编译scss文件时不支持中文字体的解决方案

    第一种方案:在scss文件第一行加上这行代码@charset "utf-8"; 第二种方案: scss文件编译时候使用ruby环境,出现 Syntax error: Invalid ...

  8. CF#345 (Div1)

    论蒟蒻如何被cf虐 以下是身败名裂后的题解菌=========== Div1 A.Watchmen 有n个点,每个点有一个坐标.求曼哈顿距离=欧几里得距离的点对数量. 只需要统计x或y一样的点对数量. ...

  9. 配置Tomcat使用Redis作为session管理

    1. 在 tomcat/lib 中增加以下jar包 commons-pool2-.jar jedis-.jar tomcat-redis-session-manager-.jar 2. 修改tomca ...

  10. Meet Github

    Source: http://www.liaoxuefeng.com/ Here only the local part. Install on windows download: https://g ...