vijosp1507郁闷的出纳员
一道平衡树实现的名次树,用了treap实现。
1.rand()产生的数可能比INF大,很可能改变树的结构。
2.删除时先递归,然后再删除自己,实现就变得简单多了。
3.因为很多情况树会是空的,所以设了一个root虚拟节点。设指针时一定要new一个出来。
就这样,其实水题一道。
#include<cstdio>
#include<algorithm>
#include<cstdlib>
using namespace std;
const int maxn = 100000 + 10;
const int INF = 1000000000 + 7; int n,minv,p = 0,ans = 0,sum; struct Node {
int v,r,s;
Node* ch[2]; int cmp(int x) const {
if(v == x) return -1;
return v < x ? 0 : 1;
} void maintain() {
s = 1;
if(ch[0] != NULL) s += ch[0]->s;
if(ch[1] != NULL) s += ch[1]->s;
} } a[maxn]; Node *root = new Node(); void rotate(Node* &o,int d) {
Node* k = o->ch[d^1];
o->ch[d^1] = k->ch[d];
k->ch[d] = o;
o->maintain();
k->maintain();
o = k;
} void insert(Node* &o,int x) {
if(o == NULL) {
o = &a[p++];
o->v = x;
o->ch[0] = o->ch[1] = NULL;
o->r = rand()%INF;
o->s = 1;
}
else {
int d = o->v > x ? 0:1;
insert(o->ch[d],x);
if(o->ch[d]->r > o->r) rotate(o,d^1);
o->maintain();
}
} void remove(Node* &o,int x) {
if(o == NULL) return;
if(o->v >= x) {
remove(o->ch[0],x);
o->maintain();
}
else {
remove(o->ch[0],x);
remove(o->ch[1],x);
if(o->ch[1] == NULL) {
o = NULL;
ans++;
}
else {
rotate(o,0);
remove(o->ch[0],x);
o->maintain();
}
}
} int find(Node* o,int k) {
if(o == root) {return find(o->ch[0],k);}
else {
if(o == NULL) return (-1);
int m;
if(o->ch[1] == NULL) m = 0;
else m = o->ch[1]->s;
if(k == m+1) return o->v;
else if(k < m+1) return find(o->ch[1],k);
else return find(o->ch[0],k-m-1);
}
} char s[10]; int main() {
scanf("%d%d",&n,&minv);
root->v = root->r = INF;
root->s = 1;
while(n--) {
int v;
scanf("%s%d",s,&v);
if(s[0] == 'I') if(v >= minv) {insert(root,v-sum);};
if(s[0] == 'A') sum += v;
if(s[0] == 'S') {
sum -= v;
remove(root,minv-sum);
}
if(s[0] == 'F') {
if(root->s-1 < v) printf("-1\n");
else printf("%d\n",find(root,v)+sum);
}
}
printf("%d\n",ans);
return 0;
}
vijosp1507郁闷的出纳员的更多相关文章
- BZOJ 1503: [NOI2004]郁闷的出纳员
1503: [NOI2004]郁闷的出纳员 Time Limit: 5 Sec Memory Limit: 64 MBSubmit: 10526 Solved: 3685[Submit][Stat ...
- [BZOJ1503][NOI2004]郁闷的出纳员
[BZOJ1503][NOI2004]郁闷的出纳员 试题描述 OIER公司是一家大型专业化软件公司,有着数以万计的员工.作为一名出纳员,我的任务之一便是统计每位员工的工资.这本来是一份不错的工作,但是 ...
- BZOJ 1503: [NOI2004]郁闷的出纳员 splay
1503: [NOI2004]郁闷的出纳员 Description OIER公司是一家大型专业化软件公司,有着数以万计的员工.作为一名出纳员,我的任务之一便是统计每位员工的工资.这本来是一份不错的工作 ...
- c++之路进阶——codevs1286(郁闷的出纳员)
1286 郁闷的出纳员 2004年NOI全国竞赛 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 大师 Master 题目描述 Description OIER公司 ...
- 【BZOJ】【1503】 【NOI2004】郁闷的出纳员
Splay Splay的模板题吧……妥妥的序列操作= =(好像有段时间没写过这种纯数据结构题了……) /************************************************ ...
- bzoj 1503: [NOI2004]郁闷的出纳员 Treap
1503: [NOI2004]郁闷的出纳员 Time Limit: 5 Sec Memory Limit: 64 MBSubmit: 6263 Solved: 2190[Submit][Statu ...
- 数据结构(跳跃表):NOI 2004 郁闷的出纳员
郁闷的出纳员 [问题描述] OIER公司是一家大型专业化软件公司,有着数以万计的员工.作为一名出纳员,我的任务之一便是统计每位员工的工资.这本来是一份不错的工作,但是令人郁闷的是,我们的老板反复无常, ...
- bzoj1503 [NOI2004]郁闷的出纳员(名次树+懒惰标记)
1503: [NOI2004]郁闷的出纳员 Time Limit: 5 Sec Memory Limit: 64 MBSubmit: 8705 Solved: 3027[Submit][Statu ...
- NOI2004 郁闷的出纳员 Splay
郁闷的出纳员 [问题描述] OIER公司是一家大型专业化软件公司,有着数以万计的员工.作为一名出纳员,我的任务之一便是统计每位员工的工资.这本来是一份不错的工作,但是令人郁闷的是,我们的老板反复无常, ...
随机推荐
- PHP中session的使用
1.初始化(使用session前都要使用,一个页面用一个就可以了) session_start(); 2.保存 $_SESSION[$sessionName]=$value; (value可以是dou ...
- C语言多线程编程
HANDLE CreateThread(LPSECURITY_ATTRIBUTES lpThreadAttributes, DWORD dwStackSize, LPTHREAD_START_ROUT ...
- AvalonDock 2.0 的简单运用
最近在研究AvalonDock的一些使用,碰到了一些问题.现在拿出来跟大家分享分享. 网上找了一大把AvalonDock 1.3版本的资料,弄出Demo后发现属性面板(DockableContent) ...
- (转)Qt Model/View 学习笔记 (七)——Delegate类
Qt Model/View 学习笔记 (七) Delegate 类 概念 与MVC模式不同,model/view结构没有用于与用户交互的完全独立的组件.一般来讲, view负责把数据展示 给用户,也 ...
- 收录一个简单的css类库
/* CSS liberary */.yahei { font-family: "Microsoft Yahei", "Tahoma", "Si ...
- Unity3d之UGUI- Image拦截Button响应事件
在编辑UI的时候Image放在Button前面就会挡掉button的响应 这种情况只需要为Image添加CanvasGroup組件 按照这个属性配置就不会挡掉后面的事件了
- sql中的inner join, left join, right join的区别
下面介绍一下 inner join, left join, right join这者之间的区别 现在我假设有A表和B表 left join select * from A a left join B ...
- 安装oracle 11g详细过程仅供参考
- Hibernate关系级别注解
最近在学习Hibernate的相关知识,这一站学习的是Hibernate的注解相关的操作和知识.在这里标注以下为以后查阅和需要帮助的朋友提供便利. 一. 开发环境的搭建: 1. 需要的jar包配置: ...
- Discuz云平台站点信息同步失败,An unknown error occurred. May be DNS Error.
站点信息同步失败 An unknown error occurred. May be DNS Error. (ERRCODE:1) 经过Discuz教程网(http://www.1314study.c ...