AC日记——郁闷的出纳员 codevs 1286
思路:
设工资下限为ko,然后ko--(因为要小于工资下限);
设cur为记录工资增长,降低;
设第i个人的工资为pos;
对应的四种操作:
插入:cur-pos-ko;
增长:cur-=pos;
降低:cur+=pos;
每个降低操作都要进行一次删除节点;
把小于等于cur的节点全部删掉;
排名:输出rank()-cur+ko;
splay支持以上全部操作;
还有一点,如果一开始这个人的工资小于ko,则不算在离去的人里;
来,上代码:
#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm> using namespace std; #define maxn 1000005 struct TreeNodeType {
int w,key,opi,size,ch[]; void destroy()
{
w=key=opi=size=ch[]=ch[]=;
} void create(int x)
{
key=x;
w=size=;
opi=ch[]=ch[]=;
}
};
struct TreeNodeType tree[maxn<<]; int n,ko,root,tot,cur,ans,tot_; inline void in(int &now)
{
register char Cget=getchar();now=;
while(Cget>''||Cget<'') Cget=getchar();
while(Cget>=''&&Cget<='')
{
now=now*+Cget-'';
Cget=getchar();
}
} inline int getson(int now)
{
return tree[tree[now].opi].ch[]==now;
} inline void updata(int now)
{
tree[now].size=tree[now].w;
if(tree[now].ch[]) tree[now].size+=tree[tree[now].ch[]].size;
if(tree[now].ch[]) tree[now].size+=tree[tree[now].ch[]].size;
} inline void rotate(int now)
{
int opi=tree[now].opi,fopi=tree[opi].opi,pos=getson(now);
if(tree[tree[now].ch[pos^]].opi)tree[tree[now].ch[pos^]].opi=opi;
tree[opi].ch[pos]=tree[now].ch[pos^];
if(fopi) tree[fopi].ch[getson(opi)]=now;
tree[opi].opi=now;tree[now].opi=fopi;
tree[now].ch[pos^]=opi;
updata(opi),updata(now);
} void splay(int now)
{
for(int opi;opi=tree[now].opi;rotate(now))
{
if(tree[opi].opi) rotate(getson(now)==getson(opi)?opi:now);
}
root=now;
} void insert(int x)
{
if(!root) tree[++tot].create(x),root=tot;
else
{
int now=root,opi=;
while()
{
if(tree[now].key==x)
{
tree[now].w++;
tree[now].size++;
splay(now);
break;
}
opi=now,now=tree[now].ch[x>tree[now].key];
if(!now)
{
tot++;
tree[tot].create(x);
tree[tot].opi=opi;
tree[opi].ch[x>tree[opi].key]=tot;
splay(tot);break;
}
}
}
} void del()
{
ans+=tree[root].size-;
if(!tree[root].ch[]) tree[].destroy(),root=;
else
{
int tmp=root;
root=tree[root].ch[];
tree[tmp].destroy();
tree[root].opi=;
ans-=tree[root].size;
}
} int rank(int x)
{
int now=root;
while()
{
if(tree[now].ch[])
{
if(x>tree[tree[now].ch[]].size) x-=tree[tree[now].ch[]].size;
else
{
now=tree[now].ch[];
continue;
}
}
if(x<=tree[now].w)
{
splay(now);
return tree[now].key;
}
else
{
x-=tree[now].w;
now=tree[now].ch[];
}
}
} int main()
{
in(n),in(ko),ko--;
char ch[];int pos;
while(n--)
{
scanf("%s",ch);in(pos);
if(ch[]=='I') if(pos>ko) insert(pos+cur-ko),tot_++;
if(ch[]=='A') cur-=pos;
if(ch[]=='S') cur+=pos,insert(cur),del();
if(ch[]=='F')
{
if(tot_-ans>=pos) printf("%d\n",rank(tot_-ans-pos+)-cur+ko);
else printf("-1\n");
}
}
printf("%d\n",ans);
return ;
}
AC日记——郁闷的出纳员 codevs 1286的更多相关文章
- AC日记——接龙游戏 codevs 1051
1051 接龙游戏 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 钻石 Diamond 题目描述 Description 给出了N个单词,已经按长度排好了序.如果 ...
- AC日记——地鼠游戏 codevs 1052
1052 地鼠游戏 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 钻石 Diamond 题解 题目描述 Description 王钢是一名学习成绩优异的学生,在平 ...
- AC日记——鬼谷子的钱袋 codevs 2998
2998 鬼谷子的钱袋 2006年省队选拔赛湖南 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 大师 Master 题目描述 Description 鬼谷子非常聪明,正 ...
- AC日记——舒适的路线 codevs 1001 (并查集+乱搞)
1001 舒适的路线 2006年 时间限制: 2 s 空间限制: 128000 KB 题目等级 : 钻石 Diamond 题解 查看运行结果 题目描述 Description Z小镇是 ...
- AC日记——逃跑的拉尔夫 codevs 1026 (搜索)
1026 逃跑的拉尔夫 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 黄金 Gold 题解 题目描述 Description 年轻的拉尔夫开玩笑地从一 ...
- AC日记——自然数和分解 codevs 2549
自然数和分解 思路: 水题: 代码: #include <bits/stdc++.h> using namespace std; ][]; int main() { cin>> ...
- AC日记——营业额统计 1296 codevs
1296 营业额统计 2002年 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 大师 Master 题解 查看运行结果 题目描述 Description Tiger ...
- AC日记——花店橱窗布置 codevs 1028
题目描述 Description 假设以最美观的方式布置花店的橱窗,有F束花,V个花瓶,我们用美学值(一个整数)表示每束花放入每个花瓶所产生的美学效果.为了取得最佳的美学效果,必须使花的摆放取得最大的 ...
- AC日记——最优贸易 codevs 1173
题目描述 Description [问题描述]C 国有n 个大城市和m 条道路,每条道路连接这n 个城市中的某两个城市.任意两个城市之间最多只有一条道路直接相连.这m 条道路中有一部分为单向通行的道路 ...
随机推荐
- Appium运行时没有启动activity的权限:A new session could not be created.(Original error: Permission to start activity denied)
小白搞appium,遇到启动不了activity的问题: 查找解决方案说是跟AndroidManifest.xml有关系,参考:https://github.com/appium/appium/iss ...
- java的类加载器体系结构和双亲委派机制
类加载器将字节码文件加载到内存中,同时在方法区中生成对应的java.land.class对象 作为外部访问方法区的入口. 类加载器的层次结构: 引导类加载器<-------------扩展类加 ...
- Beats、Filebea入门
1. Filebeat配置简介 2. Filebeat收集nginx日志 3. packetbeat简介与演示
- loj2035 「SDOI2016」征途
学了斜率优化这题就能一气呵成地做出来啦qwqqwq #include <iostream> #include <cstdio> using namespace std; typ ...
- C#入门篇6-4:字符串操作 string分割字符串效率比较
//分割字符串效率比较 public static void Fund() { //1.用string.Split方法 //a.字节数组: //625毫秒/百万次 string str1 = &quo ...
- 运维自动化之puppet3分钟入门
运维自动化之puppet3分钟入门 几个月前曾因为项目需求而学了点puppet的一些知识,最近因为要给别人讲一下,也就借此博文来做一下回忆,当然了,这个puppet用起来还是很不错的,尤其对我这种懒人 ...
- ogre3D学习基础5 -- 阴影与动画
五.阴影 阴影是渲染一个真实场景的重要组成部分,它可以给场景中的物体提供更加真实的感觉,同时还可以帮助用户更好的了解对象间的空间关系. 启用阴影: 缺省情况下,阴影是关闭的,开启方式如下: 1.建立场 ...
- python学习-- 在django中,执行原始sql语句
from django.shortcuts import render, redirect from news.models import Article, Column def test(reque ...
- python学习-- settings 设置sqlserver连接
PyCharm 开发工具 先打开项目 1. ctrl+alt+s 2. project:项目名称 选中Project Interpreter,点右面+号 :搜索 django-pyodbc-az ...
- linq本质扩展方法+lambda表达式
string[] names = { "aa","bb","cc","dd"}; /* IEnumerable<s ...