UESTC 395 Dynamic Query System --Treap
题意:让你维护一个集合,有8种操作:
1. I x 插入一个数
2. R x 删除x
3. S 输出总的数个数(集合大小)
4. L x 查询小于x的数的个数
5. W k 查询集合中数从小到大排列的第k个数
6. C x 查询x的个数
7. MI 查询集合中最小的数
8. MA 查询集合中最大的数
一道平衡树模拟的裸题,直接套版然后改下细节就行了。
代码:
#include <iostream>
#include <cstdio>
#include <cstring>
#include <cstdlib>
#include <algorithm>
using namespace std; struct node
{
node *ch[];
int v,r,sz,cnt;
void UP(){ sz = ch[]->sz + ch[]->sz + cnt; }
int cmp(int x)const
{
if(x == v) return -;
return x > v;
}
}*null,*root; void create(node *&o,int v=)
{
o = new node();
o->sz = o->cnt = ;
o->v = v;
o->r = rand();
o->ch[] = o->ch[] = null;
} void rotate(node *&o,int d)
{
node *p = o->ch[d];
o->ch[d] = p->ch[d^];
p->ch[d^] = o;
o->UP(),p->UP();
o = p;
} int countx(node *o,int v)
{
while(o != null)
{
int d = o->cmp(v);
if(d == -)
return o->cnt;
o = o->ch[d];
}
return ;
} void insert(node *&o,int v)
{
if(o == null)
{
create(o,v);
return;
}
int d = o->cmp(v);
if(d == -)
{
o->cnt++;
o->UP();
return;
}
insert(o->ch[d],v);
if(o->r > o->ch[d]->r)
rotate(o,d);
if(o != null)
o->UP();
} void del(node *&o,int v)
{
if(o == null) return;
int d = o->cmp(v);
if(d == -)
{
if(o->cnt > )
o->cnt--;
else
{
if(o->ch[] == null) o = o->ch[];
else if(o->ch[] == null) o = o->ch[];
else
{
int d2 = o->ch[]->r < o->ch[]->r;
if(o->ch[d2] == null)
{
delete o;
o = null;
return;
}
rotate(o,d2);
del(o->ch[d2^],v);
}
}
}
else del(o->ch[d],v);
if(o != null)
o->UP();
} int Kth(node *o,int k)
{
if(o == null || k == || k > o->sz) return -;
int left = o->ch[]->sz;
if(k > left && k <= left + o->cnt)
return o->v;
if(k > left + o->cnt)
return Kth(o->ch[],k-left-o->cnt);
return Kth(o->ch[],k);
} int Count(node *o,int v)
{
if(o == null) return ;
int left = o->ch[]->sz;
if(o->v == v) return left;
else if(v < o->v)
return Count(o->ch[],v);
return Count(o->ch[],v)+left+o->cnt;
} void init()
{
create(null);
null->sz = ;
root = null;
} int main()
{
int t,n,i,x;
char ss[];
scanf("%d",&t);
while(t--)
{
init();
scanf("%d",&n);
while(n--)
{
scanf("%s",ss);
if(ss[] == 'M')
{
if(ss[] == 'I')
printf("%d\n",Kth(root,));
else
printf("%d\n",Kth(root,root->sz));
}
else if(ss[] == 'I')
{
scanf("%d",&x);
insert(root,x);
}
else if(ss[] == 'S')
{
printf("%d\n",root->sz);
}
else if(ss[] == 'R')
{
scanf("%d",&x);
del(root,x);
}
else if(ss[] == 'L')
{
scanf("%d",&x);
printf("%d\n",Count(root,x));
}
else if(ss[] == 'W')
{
scanf("%d",&x);
printf("%d\n",Kth(root,x));
}
else if(ss[] == 'C')
{
scanf("%d",&x);
printf("%d\n",countx(root,x));
}
}
}
return ;
}
UESTC 395 Dynamic Query System --Treap的更多相关文章
- [Liferay6.2]Liferay Dynamic Query API示例
介绍 Liferay提供了几种方法定义复杂的查询用来检索数据库中的数据. 通常情况下,在每个service Entity中,通过定义一些'finder'方法,可以便捷地满足基本的数据查询操作. 但是, ...
- Mybatis Dynamic Query 框架整合
项目地址:https://github.com/wz2cool/mybatis-dynamic-query 文档地址:https://wz2cool.gitbooks.io/mybatis-dynam ...
- HDU 3686 Traffic Real Time Query System(双连通分量缩点+LCA)(2010 Asia Hangzhou Regional Contest)
Problem Description City C is really a nightmare of all drivers for its traffic jams. To solve the t ...
- Mybatis Dynamic Query 1.0.2版本
项目地址:https://github.com/wz2cool/mybatis-dynamic-query 文档地址:https://wz2cool.gitbooks.io/mybatis-dynam ...
- Mybatis Dynamic Query 2.0 入门
简介 2.0 昨天打包好了,主要是整合了tk.mybatis.mapper 到项目中去,所以和1.x比起来主要多了一个通用mapper.因为作者主要是使用springboot 这里讲一下Springb ...
- Mybatis Dynamic Query 2.0.2
项目地址:https://github.com/wz2cool/mybatis-dynamic-query 文档地址:https://wz2cool.gitbooks.io/mybatis-dynam ...
- CH#24C 逃不掉的路 和 HDU3686 Traffic Real Time Query System
逃不掉的路 CH Round #24 - 三体杯 Round #1 题目描述 现代社会,路是必不可少的.任意两个城镇都有路相连,而且往往不止一条.但有些路连年被各种XXOO,走着很不爽.按理说条条大路 ...
- HDU 3686 Traffic Real Time Query System (图论)
HDU 3686 Traffic Real Time Query System 题目大意 给一个N个点M条边的无向图,然后有Q个询问X,Y,问第X边到第Y边必需要经过的点有多少个. solution ...
- HDU3686 Traffic Real Time Query System 题解
题目 City C is really a nightmare of all drivers for its traffic jams. To solve the traffic problem, t ...
随机推荐
- jQuery Panorama Viewer – 360度全景展示插件
jQuery Panorama Viewer 这款插件可以帮助你在网站中嵌入全景图片.要做到这一点,首先只需要在页面中引入最新的 jQuery 库,以及 jquery.panorama_viewer. ...
- 免费 PSD 下载: 20个精美的登录和注册表单
注册表单有许多不同的形状和尺寸,有的只是单个的输入框,有的则需要多个步骤.登录表单的设计将定义网站的性质,因此它应进行针对性的设计.下面的列表提供了20个醒目的登录和注册表单设计为您提供灵感. 您可能 ...
- JavaScript 数据类型判断
JavaScript 的数据类型分为两类:原始类型(基本类型)和对象类型(引用类型).原始类型包括数字.字符串和布尔值,另外有两个特殊的原始值:null 和 undefined,除此之外的都是对象.对 ...
- 如何设置'REUSE_ALV_GRID_DISPLAY'的单个单元格的颜色
REPORT ydemo_rick_a . TYPE-POOLS: slis. , carrid LIKE sflight-carrid, connid LIKE sflight-connid, fl ...
- SharePoint 2013 直接给AD 组赋权限后,AD组里的用户还是登陆不了SharePoint,提示没有权限
直接给一个all person的AD组赋了个read权限,然后将一个名为“all beijing”的组加到all person组里,但是all beijing组里的人却不能登录sharepoint,提 ...
- 闲聊桌面应用开发[Win16->Win32->ATL/WTL/MFC->WinForm->WPF/Silverlight/WinRT]
闲来无聊,正好小组人员讨论到桌面的开发,那把笔者接触的WIndows平台下的几个主要的发展过程聊一聊. 主要从概述,参考资料,图书等几个方面说起. 所有的界面开发都会涉及如下的几个方面的内容: v 控 ...
- 表达式语言EL
表达式语言EL 表达式语言 EL(Expression Language,表达式语言)主要是用在JSP页面中,用来辅助我们产生无脚本的JSP页面,此处的脚本指的是JSP中的Java代码. EL的语法是 ...
- Quartz2D复习(二) --- 手势解锁
这次支付宝手机客户端升级,把手势解锁那个功能去掉了,引起很多人的抱怨,觉得少了手势解锁的保护,个人信息容易泄漏了... 那么手势解锁功能是怎么是实现的呢,这里使用Quart2D来简单模拟一下, 先看下 ...
- ios网络编程学习
//网络访问获取数据//定义一个UIWebView属性,用来展示数据 @property (strong, nonatomic) IBOutlet UIWebView *myWebView; //.. ...
- iOS关于CAShapeLayer与UIBezierPath的知识内容
使用CAShapeLayer与UIBezierPath可以实现不在view的drawRect方法中就画出一些想要的图形 . 1:UIBezierPath: UIBezierPath是在 UIKit 中 ...