【算法】平衡树(treap)

【题解】

treap知识见数据结构

解法,具体细节见程序。

#include<cstdio>
#include<algorithm>
#include<ctime>
using namespace std;
const int maxn=;
struct cyc{int l,r,rnd,s,num;}t[maxn*];
int n,sz,low,root,delta;
void rturn(int &tt)
{
int k=t[tt].l;
t[tt].l=t[k].r;
t[k].r=tt;
t[k].s=t[tt].s;
t[tt].s=t[t[tt].l].s+t[t[tt].r].s+;
tt=k;
}
void lturn(int &tt)
{
int k=t[tt].r;
t[tt].r=t[k].l;
t[k].l=tt;
t[k].s=t[tt].s;
t[tt].s=t[t[tt].l].s+t[t[tt].r].s+;
tt=k;
}
void insert(int &k,int x)
{
if(k==)
{
k=++sz;
t[k].rnd=rand();
t[k].s=;//s表示该子树的节点个数(含本身)
t[k].num=x;
return;
}
t[k].s++;
if(x<t[k].num)
{
insert(t[k].l,x);
if(t[t[k].l].rnd<t[k].rnd)rturn(k);
}
else
{
insert(t[k].r,x);
if(t[t[k].r].rnd<t[k].rnd)lturn(k);
}
}
int del(int &k,int x)
{
int sum=;
if(k==)return ;
if(x>t[k].num){sum=t[t[k].l].s+;k=t[k].r;return sum+del(k,x);}//直接将根从k变为k的右子树,由于&的传递效果,相当于直接废了左子树和根节点,把右子树接上去。
else{sum=del(t[k].l,x);t[k].s-=sum;return sum;}
}
int find(int k,int x)
{
if(t[t[k].l].s+==x)return(t[k].num+delta);
if(x<=t[t[k].l].s)return(find(t[k].l,x));
else return(find(t[k].r,x-t[t[k].l].s-));
}
int main()
{
scanf("%d%d",&n,&low);
srand(time());
int ans=;
for(int i=;i<=n;i++)
{
char c=getchar();int rd;
while(c<'A'||c>'Z')c=getchar();
scanf("%d",&rd);
if(c=='I')if(rd>=low)insert(root,rd-delta);
if(c=='A')delta+=rd;
if(c=='S'){delta-=rd;ans+=del(root,low-delta);}
if(c=='F')
{
if(t[root].s<rd)printf("-1\n");
else printf("%d\n",find(root,t[root].s-rd+));
}
}
printf("%d",ans);
return ;
}

【NOI】2004 郁闷的出纳员的更多相关文章

  1. 数据结构(跳跃表):NOI 2004 郁闷的出纳员

    郁闷的出纳员 [问题描述] OIER公司是一家大型专业化软件公司,有着数以万计的员工.作为一名出纳员,我的任务之一便是统计每位员工的工资.这本来是一份不错的工作,但是令人郁闷的是,我们的老板反复无常, ...

  2. NOI 2004 郁闷的出纳员(平衡树)

    题目描述 OIER公司是一家大型专业化软件公司,有着数以万计的员工.作为一名出纳员,我的任务之一便是统计每位员工的工资.这本来是一份不错的工作,但是令人郁闷的是,我们的老板反复无常,经常调整员工的工资 ...

  3. NOI 2004 郁闷的出纳员

    Description OIER公司是一家大型专业化软件公司,有着数以万计的员工.作为一名出纳员,我的任务之一便是统计每位员工的工资.这本来是一份不错的工作,但是令人郁闷的是,我们的老板反复无常,经常 ...

  4. [bzoj 1503][NOI 2004]郁闷的出纳员(平衡树)

    题目:http://www.lydsy.com/JudgeOnline/problem.php?id=1503 分析: 经典的平衡树题,我用Treap做的 下面有几点注意的: 1.可能出现新加入的人的 ...

  5. 洛谷 P1486 BZOJ 1503 NOI 2004 郁闷的出纳员 fhq treap

    思路: 1. 此处的fhq treap的分裂是按照权值分裂然后插入的.将小于k的分为一棵子树,大于等于k的分为另一棵子树. 2. 删除的时候只要将大于等于min的分裂到以root为根的树中,另一部分不 ...

  6. bzoj 1503[NOI 2004] 郁闷的出纳员

    题目大意: 给4种操作 I:添加一个员工工资信息 A:增加所有员工的工资 S:减少所有员工的工资 F:询问工资第k高的员工的工资情况 自己做的第一道splay树的题目,初学找找感觉 #include ...

  7. c++之路进阶——codevs1286(郁闷的出纳员)

    1286 郁闷的出纳员 2004年NOI全国竞赛  时间限制: 1 s  空间限制: 128000 KB  题目等级 : 大师 Master       题目描述 Description OIER公司 ...

  8. BZOJ 1503: [NOI2004]郁闷的出纳员

    1503: [NOI2004]郁闷的出纳员 Time Limit: 5 Sec  Memory Limit: 64 MBSubmit: 10526  Solved: 3685[Submit][Stat ...

  9. [BZOJ1503][NOI2004]郁闷的出纳员

    [BZOJ1503][NOI2004]郁闷的出纳员 试题描述 OIER公司是一家大型专业化软件公司,有着数以万计的员工.作为一名出纳员,我的任务之一便是统计每位员工的工资.这本来是一份不错的工作,但是 ...

随机推荐

  1. eg_1

    1. 编写一个程序,输出一个字符串中的大写英文字母个数,小写英文字母个数以及非英文字母个数. 第一种方法: public class Test { public static void main(St ...

  2. CNN之间的计算

    参考内容 1.网易云课堂微专业——深度学习—04第一周:http://mooc.study.163.com/smartSpec/detail/1001319001.htm 2.CNN基础介绍:http ...

  3. ubuntu 只有客人会话登录(第一次深刻感受文件权限的威力 )

    为了测试docker的挂载权限,把宿主机的/etc/passwd文件挂载到了虚机当中,进入虚机想看下能不能直接对我宿主机上的文件进行操作,把/etc/passwd删掉了最后十行...结果宿主机上的/e ...

  4. HashMap源码剖析及实现原理分析(学习笔记)

    一.需求 最近开发中,总是需要使用HashMap,而为了更好的开发以及理解HashMap:因此特定重新去看HashMap的源码并写下学习笔记,以便以后查阅. 二.HashMap的学习理解 1.我们首先 ...

  5. Oracle基础 表分区

    Oracle基础 表分区 一.表分区 (一)表分区的分类 1.范围分区(range) 2.散列分区(hash) 3.列表分区(list) 4.复合分区:范围-哈希(range-hash).范围-列表( ...

  6. [剑指Offer] 65.矩阵中的路径

    题目描述 请设计一个函数,用来判断在一个矩阵中是否存在一条包含某字符串所有字符的路径.路径可以从矩阵中的任意一个格子开始,每一步可以在矩阵中向左,向右,向上,向下移动一个格子.如果一条路径经过了矩阵中 ...

  7. [计算机网络-应用层] HTTP协议

    1.HTTP概况 Web的应用层协议是超文本传输协议(HTTP),它是Web的核心. HTTP由两部分程序实现:一个客户机程序和一个服务器程序,它们运行在不同的端系统中,通过交换HTTP报文进行对话. ...

  8. BZOJ4563:[HAOI2016]放棋子——题解

    https://www.lydsy.com/JudgeOnline/problem.php?id=4563 给你一个N*N的矩阵,每行有一个障碍,数据保证任意两个障碍不在同一行,任意两个障碍不在同一列 ...

  9. BZOJ3864 & HDU4899:Hero meet devil——题解

    https://www.lydsy.com/JudgeOnline/problem.php?id=3864 http://acm.hdu.edu.cn/showproblem.php?pid=4899 ...

  10. 洛谷 P4964 绫小路的特别考试 解题报告

    P4964 绫小路的特别考试 题目背景 这世界上「胜利」便是一切.无关乎过程. 要付出多少牺牲都无所谓.只要最后我「胜出」那就行了. 题目描述 一场新的特别考试来临了,这次的考试内容是(wan e d ...