NOI 2004 郁闷的出纳员 Splay

网址:http://www.lydsy.com/JudgeOnline/problem.php?id=1503

所有的操作都比较简单,而对于调整工资,就必须思考下,不过也简单,直接变成调整界限,和新来员工工资即可,剩下的就是splay。。。

/**************************************************************
    Problem: 1503
    User: h6363817
    Language: C++
    Result: Accepted
    Time:992 ms
    Memory:3228 kb
****************************************************************/

#include <iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
const int mm=100020;
const int oo=2e9;
struct SplayTree
{
    int son[mm][2],far[mm],val[mm],sum[mm];
    int rt,size;
    void PushUp(int x)
    {
        sum[x]=sum[son[x][0]]+sum[son[x][1]]+1;
    }
    void Link(int x,int y,int c)
    {
        far[x]=y,son[y][c]=x;
    }
    void Rotate(int x,int c)
    {
        int y=far[x];
        Link(x,far[y],son[far[y]][1]==y);
        Link(son[x][!c],y,c);
        Link(y,x,!c);
        PushUp(y);
    }
    void Splay(int x,int g)
    {
        for(; far[x]!=g;)
        {
            int y=far[x],cx=(son[y][1]==x),cy=(son[far[y]][1]==y);
            if(far[y]==g)Rotate(x,cx);
            else
            {
                if(cx==cy)Rotate(y,cy);
                else Rotate(x,cx);
                Rotate(x,cy);
            }
        }
        PushUp(x);
        if(!g)rt=x;
    }
    void NewNode(int y,int &x,int a)
    {
        x=++size;
        far[x]=y,val[x]=a,sum[x]=1;
        son[x][0]=son[x][1]=0;
    }
    void Insert(int a)
    {
        int x=rt;
        while(son[x][val[x]<a])x=son[x][val[x]<a];
        NewNode(x,son[x][val[x]<a],a);
        Splay(size,0);
    }
    void Prepare()
    {
        NewNode(size=0,rt,-oo);
        NewNode(rt,son[rt][1],oo);
        sum[rt]=2;
    }
    int Suc(int a)
    {
        int x=rt,ret=oo;
        while(x)
        {
            if(val[x]==a) return a;
            if(val[x]>a) ret=min(ret,val[x]);
            x=son[x][val[x]<a];
        }
        return ret;
    }
    int Pre(int a)
    {
        int x=rt,ret=-oo;
        while(x)
        {
            if(val[x]==a)return a;
            if(val[x]<a)ret=max(ret,val[x]);
            x=son[x][val[x]<a];
        }
        return ret;
    }
    int Find(int a)
    {
        int x=rt,ans=0;
        while(x)
        {
            if(val[x]==a) ans=x;
            x=son[x][val[x]<a];
        }
        return ans;
    }
    int Select(int k,int g)
    {
        int x=rt;
        while(sum[son[x][1]]!=k)
        {
            if(sum[son[x][1]]>k) x=son[x][1];
            else k-=(sum[son[x][1]]+1),x=son[x][0];
        }
        Splay(x,g);
        return val[x];
    }
    int Delete(int a)
    {
        int x=Find(a),ans=0;
        if(x)
        {
            Splay(1,0);
            Splay(x,1);
            ans=sum[son[x][0]];
            son[x][0]=0;
            Splay(x,0);
        }
        return ans;
    }
} spt;
int main()
{
    int n,m,w,a,ans;
    char s[5];
    while(~scanf("%d%d",&n,&m))
    {
        spt.Prepare();
        w=ans=0;
        while(n--)
        {
            scanf("%s%d",s,&a);
            if(s[0]=='I')
            {
                a-=w;
                if(a>=m-w) spt.Insert(a);
            }
            if(s[0]=='A') w+=a;
            if(s[0]=='S') w-=a,ans+=spt.Delete(spt.Suc(m-w));
            if(s[0]=='F')
            {
                if(spt.sum[spt.rt]<a+2) puts("-1");
                else printf("%d\n",spt.Select(a,0)+w);
            }
        }
        printf("%d\n",ans);
    }
    return 0;
}
时间: 2024-10-30 14:33:35

NOI 2004 郁闷的出纳员 Splay的相关文章

NHOI 2004 宠物收养所 splay解法

1208: [HNOI2004]宠物收养所 Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 3047  Solved: 1098 [Submit][Status] Description 最近,阿Q开了一间宠物收养所.收养所提供两种服务:收养被主人遗弃的宠物和让新的主人领养这些宠物.每个领养者都希望领养到自己满意的宠物,阿Q根据领养者的要求通过他自己发明的一个特殊的公式,得出该领养者希望领养的宠物的特点值a(a是一个正整数,a<2^31),而他也给

DW MX 2004网页中文乱码问题解决

解决|网页|问题|中文|中文乱码 用DW MX 2004编辑网页的时候,很多朋友经常会遇到中文乱码的情况.你遇到过么? 前面我们了解了网页中的中文乱码一般原因是由于meta标签里面设定编码的的问题,尝试修改字体的参数,结果没能很好地解决这个问题,这一节我们试试修改网页编码. 在DW MX 2004中的"修改"菜单里修改网页编码. 看来这回应该改对咯. 汗~!竟然还是乱码! 再用记事本打开看看,玩完了,真傻眼了,连这个也被同化掉了 -_-!!!!!!!!!!!!!! 综上两种方法,对我来

软银赛富的“郁闷”:橡果坠落无法套现

大多数时候,对于VC们来说,只要将公司成功推上市,便基本大功告成.然而,去年在纽交所风光上市的橡果国际(ATV)却使其投资人软银赛富有些"郁闷". 6月27日(美国时间6月26日),橡果国际收报于7.6美元,这比其2007年5月3日登陆纽交所的首日开盘价19.9美元已跌去60%以上. 至今年5月,橡果国际上市一年禁售期已到,而面对持续低迷的股价,风险投资商自然无法通过套现,获得可观的利润. "对于橡果国际盈利下滑,股价低迷的局面,投资人代表在不久前召开的橡果国际董事会上已经指

Flash MX 2004新特性实例学习一

    Flash MX 2004的试用版终于可以下载了,它帮助文件中自带的例子很好地反映了2004中新增加的功能.下面我们通过学习这些例子的制作,来熟悉在2004中新增加的功能.这些例子都是从Flash MX 2004的帮助文档中来的.在我的windows2000中的保存路径是C:Documents and SettingsAdministratorLocal SettingsApplication DataMacromediaFlash MX 2004enConfigurationSampl

2004中国媒体十大事件

媒体 寒风袭来,暖冬不再.又是一年即将逝去,又到了各种"盘点"粉墨登场的时刻,作为记录中国时代变迁的媒体,也在这一年中感受着属于自己的苦辣酸甜.而"中国媒体十大事件",作为记录中国媒体自身成长履历的文本,在这个寒冷的冬天,再次站在"晓德"的视角,以我个人的观察来对这一年的媒体事件进行相对自我的评说,对与否,全面或偏颇,都不重要,重要的,是有这样一份纯粹个人的记录,让每一年媒体的不完全事件得到梳理吧. 1.两会期间,三大门户网站"评论&q

教程/dreamweaver/提高 体验DW MX 2004 CSS新功能

css|dreamweaver|教程  CSS是制作网页效果必不可少的东西,字体的颜色定义.表格的样式定义.图片的特效等等都少不了它.但在Dreamweaver的早期版本中CSS的编辑功能并不是很强大,有时候不得不借助一些类似于TopStyle的第三方工具来完成CSS的编写. 现在有了Dreamweaver MX 2004(简称DW MX 2004),情况就完全不同了! 首先我们给页面链接一个已经编写好的CSS文件,这里的操作与老版本Dreamweaver的方法是相同的(图1). 链接好后,和老

教程/dreamweaver/提高 细品DW MX 2004内建FW技术

dreamweaver|教程  Macromedia官方将在其他软件中内建Fireworks技术称为Fireworks技术,网上也称之为内建图片编辑器.Dreamweaver MX 2004给人的一个感觉就是与Macromedia公司其它产品的全面无缝集成,这样就大大缩短了开发人员的开发周期,提高工作效率. 以前的Dreamweaver中是没有图片处理功能的,即使你要处理也只能使用CSS中的相关滤镜进行一些效果的改变,而大多数特效的制作我们则必须使用Fireworks或者Photoshop工具.

教程/dreamweaver/提高 DW MX 2004新功能:浏览器检测

dreamweaver|教程|浏览器 今天我们来一起看看Dreamweaver MX 2004在动态浏览器检测方面的新功能. Dreamweaver MX 2004版本中,新增了多浏览器检测页面运行错误的功能.我们设计的页面,在某一种浏览器效果下可能正常运行,在其它浏览器中可能会报错,有时候连文字链接.版式都不统一了.为了避免这样的情况发生,2004 版本增加了支持多款浏览器检测功能. 我们可以在 Dreamwaver 编辑界面的导航栏上看到新增的" No Browser check Error

教程/dreamweaver/提高 DW MX 2004新功能:加密FTP

dreamweaver|加密|教程 今天我们来一起看看Dreamweaver MX 2004在加密FTP 传送 方面的新功能. 我们一般在做FTP文件传送的时候,默认情况下传送过程是公开的,即我们FTP的用户名和密码都是可见的.这样在网络上传输缺乏安全性, Dreamweaver MX 2004 的FTP功能对此作了修改,增加了SFTP传送功能,即上传下载站点文件时可以有效保护FTP用户名.密码,保障网络传输的安全性.如图8 图8 关于这项功能需要注意:在实践过程中,如果你的网站服务器没有开通"