【算法】平衡树(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. ubuntu上的inpack测试

    测试linpack 配置 配置linpack环境是整个过程中最麻烦的,也可能是因为我在配置的过程中出现了很多小问题吧.大概有3天的时间除了上课就在配置环境. 问题 总结起来问题和解决方法有这些 1.路 ...

  2. MVC4 DropDownList (一) — 使用方法

    1.下面代码包含了三种绑定DropDownList的方法 using System; using System.Collections.Generic; using System.Linq; usin ...

  3. html .net 网页,网站标题添图标

    <link rel="icon" href="../favicon.ico" type="image/x-icon" /> &l ...

  4. 3ds Max学习日记(一)

      暑假闲来无事学习一发3ds Max.为啥要学这玩意?貌似可以用这东西三维建模.暑期生产实习选了一个搞vr的导师,貌似他忙得很,无奈只好先自己研究一下啦~   vr神马的还是有点意思的,虽然自己仅仅 ...

  5. PAT L1-044 稳赢

    https://pintia.cn/problem-sets/994805046380707840/problems/994805086365007872 大家应该都会玩“锤子剪刀布”的游戏:两人同时 ...

  6. 【Docker 命令】- top命令

    docker top :查看容器中运行的进程信息,支持 ps 命令参数. 语法 docker top [OPTIONS] CONTAINER [ps OPTIONS] 容器运行时不一定有/bin/ba ...

  7. centos7 下pycharm无法输入中文问题解决方案

    作者使用的pycharm是2017.2 在pycharm.sh脚本的如下行(大约在201行): # -------------------------------------------------- ...

  8. matlab如何将数组中的NAN值去除

        比如我们一组数据,里面有不少的NaN值,如何将其删除掉呢?可以通过find函数来搞定.     我们可以通过importdata('data.txt')将数据文件data.txt导入数组A中. ...

  9. 禁止移动端input弹出软键盘

    在做三级联动,或者一些时间插件的时候总是弹出软键盘,用下面的方法就可以禁用掉,废话不多说直接上代码. HTML代码 <div class=""> <div> ...

  10. JavaScript中Switch使用

    switch 语句用于基于不同的条件来执行不同的动作.使用 switch 语句来选择要执行的多个代码块之一. switch(n) { case 1: 执行代码块 1 break; case 2: 执行 ...