【bzoj1503】 NOI2004—郁闷的出纳员
http://www.lydsy.com/JudgeOnline/problem.php?id=1503 (题目链接)
题意
要求维护4种操作:插入一个数,将所有数加上k,将所有数减去k,删去数值小于k的数并计算个数。
Solution
splay。今天考试的时候询问时忘记下传标记了fuck dog
代码
// bzoj1503
#include<algorithm>
#include<iostream>
#include<cstdlib>
#include<cstring>
#include<cstdio>
#include<cmath>
#define LL long long
#define inf 2147483640
#define Pi acos(-1.0)
#define free(a) freopen(a".in","r",stdin),freopen(a".out","w",stdout);
using namespace std; const int maxn=500010;
int tr[maxn][2],size[maxn],val[maxn],sum[maxn],fa[maxn],tag[maxn];
int rt,cnt,S,n,ming,tot; void update(int k) {
int l=tr[k][0],r=tr[k][1];
size[k]=size[l]+size[r]+sum[k];
}
void rotate(int x,int &k) {
int y=fa[x],z=fa[y],l,r;
l=tr[y][1]==x;r=l^1;
if (k==y) k=x;
else tr[z][tr[z][1]==y]=x;
fa[x]=z;fa[y]=x;fa[tr[x][r]]=y;
tr[y][l]=tr[x][r];tr[x][r]=y;
update(y);update(x);
}
void splay(int x,int &k) {
while (x!=k) {
int y=fa[x],z=fa[y];
if (y!=k) {
if ((tr[z][0]==y) ^ (tr[y][0]==x)) rotate(x,k);
else rotate(y,k);
}
rotate(x,k);
}
}
void pushdown(int k) {
val[tr[k][1]]+=tag[k];tag[tr[k][1]]+=tag[k];
val[tr[k][0]]+=tag[k];tag[tr[k][0]]+=tag[k];
tag[k]=0;
}
void insert(int x) {
int k=rt,f=0;
while (k) {
if (tag[k]) pushdown(k);f=k;
if (x<val[k]) k=tr[k][0];
else if (x>val[k]) k=tr[k][1];
else {sum[k]++;size[k]++;S++;splay(k,rt);return;}
}
S++;
fa[++cnt]=f;sum[cnt]=size[cnt]=1;val[cnt]=x;tr[f][x>val[f]]=cnt;
splay(cnt,rt);
}
int find(int x,int k) {
if (tag[k]) pushdown(k);
int ans=0;
while (k) {
if (tag[k]) pushdown(k);
if (x==val[k]) return k;
if (x<val[k]) ans=k,k=tr[k][0];
else k=tr[k][1];
}
return ans;
}
void modify(int k) {
val[rt]+=k,tag[rt]+=k;
if (k<0) {
int x=find(ming,rt);
splay(x,rt);
tot+=size[tr[x][0]];S-=size[tr[x][0]];tr[x][0]=0;
}
}
int query(int x,int k) {
if (tag[k]) pushdown(k);
int l=tr[k][0],r=tr[k][1];
if (x>=size[r]+1 && x<=size[r]+sum[k]) return k;
else if (x<=size[r]) return query(x,r);
else return query(x-size[r]-sum[k],l);
}
int main() {
char ch[10];int k;
tot=0;
rt=cnt=1;val[1]=(1<<30);
scanf("%d%d",&n,&ming);
for (int i=1;i<=n;i++) {
scanf("%s%d",ch,&k);
if (ch[0]=='I') {if (k>=ming) insert(k);/*else tot++;*/}
if (ch[0]=='A') modify(k);
if (ch[0]=='S') modify(-k);
if (ch[0]=='F') printf("%d\n",k>S ? -1 : val[query(k,rt)]);
}
printf("%d\n",tot);
return 0;
}
【bzoj1503】 NOI2004—郁闷的出纳员的更多相关文章
- [BZOJ1503][NOI2004]郁闷的出纳员
[BZOJ1503][NOI2004]郁闷的出纳员 试题描述 OIER公司是一家大型专业化软件公司,有着数以万计的员工.作为一名出纳员,我的任务之一便是统计每位员工的工资.这本来是一份不错的工作,但是 ...
- bzoj1503 [NOI2004]郁闷的出纳员(名次树+懒惰标记)
1503: [NOI2004]郁闷的出纳员 Time Limit: 5 Sec Memory Limit: 64 MBSubmit: 8705 Solved: 3027[Submit][Statu ...
- [BZOJ1503][NOI2004]郁闷的出纳员 无旋Treap
1503: [NOI2004]郁闷的出纳员 Time Limit: 5 Sec Memory Limit: 64 MB Description OIER公司是一家大型专业化软件公司,有着数以万计的员 ...
- bzoj1503: [NOI2004]郁闷的出纳员(伸展树)
1503: [NOI2004]郁闷的出纳员 题目:传送门 题解: 修改操作一共不超过100 直接暴力在伸展树上修改 代码: #include<cstdio> #include<cst ...
- [BZOJ1503] [NOI2004] 郁闷的出纳员 (treap)
Description OIER公司是一家大型专业化软件公司,有着数以万计的员工.作为一名出纳员,我的任务之一便是统计每位员工的工资.这本来是一份不错的工作,但是令人郁闷的是,我们的老板反复无常,经常 ...
- BZOJ1503[NOI2004]郁闷的出纳员——treap
OIER公司是一家大型专业化软件公司,有着数以万计的员工.作为一名出纳员,我的任务之一便是统计每位员工的工资.这本来是一份不错的工作,但是令人郁闷的是,我们的老板反复无常,经常调整员工的工资.如果他心 ...
- [luogu1486][bzoj1503][NOI2004]郁闷的出纳员【平衡树treap】
题目描述 OIER公司是一家大型专业化软件公司,有着数以万计的员工.作为一名出纳员,我的任务之一便是统计每位员工的工资.这本来是一份不错的工作,但是令人郁闷的是,我们的老板反复无常,经常调整员工的工资 ...
- BZOJ1503: [NOI2004]郁闷的出纳员(Splay)
Description OIER公司是一家大型专业化软件公司,有着数以万计的员工.作为一名出纳员,我的任务之一便是统计每位员工的 工资.这本来是一份不错的工作,但是令人郁闷的是,我们的老板反复无常,经 ...
- BZOJ1503 [NOI2004]郁闷的出纳员 splay
原文链接http://www.cnblogs.com/zhouzhendong/p/8086240.html 题目传送门 - BZOJ1503 题意概括 如果某一个员工的工资低于了min,那么,他会立 ...
- 【题解】 bzoj1503: [NOI2004]郁闷的出纳员 (Splay)
bzoj1503,懒得复制,戳我戳我 Solution: 我知不知道我是那根筋抽了突然来做splay,调了起码\(3h+\),到第二天才改出来(我好菜啊),当做训练调错吧 一个裸的splay,没啥好说 ...
随机推荐
- Centos下Apache使用Symlink访问外部目录出现403
在Aapche 的document root 下创建软链到其他目录时, 无法从浏览器访问, 返回403错误. 主要检查两点: 1. 软链目标目录的每一级, 都要对所有人开放执行权限, 即对各级目录 c ...
- js checkbox 选中判断
var isSelect = ""; isSelect = $("#tblImgList" + " input[type='checkbox']&qu ...
- POJ 3259 Wormholes (判负环)
Wormholes Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 46123 Accepted: 17033 Descripti ...
- scala 学习笔记(02) 元组Tuple、数组Array、Map、文件读写、网页抓取示例
package yjmyzz import java.io.PrintWriter import java.util.Date import scala.io.Source object ScalaA ...
- Hadoop:pig 安装及入门示例
pig是hadoop的一个子项目,用于简化MapReduce的开发工作,可以用更人性化的脚本方式分析数据. 一.安装 a) 下载 从官网http://pig.apache.org下载最新版本(目前是0 ...
- log4j2 与 spring mvc整合
log4j2不仅仅是log4j的简单升级,而是整个项目的重构,官网地址:http://logging.apache.org/log4j/2.x/,大家可以从官网的介绍看出它相比log4j第1代的种种优 ...
- ubuntu-12.10-server安装图形界面
1.首先你需要确定你的源文件中 /etc/apt/sources.list 已经使用Universe和Multiverse库.然后使用下面的命令来进行更新源列表和安装图形桌面. sudo apt-ge ...
- Theano3.5-练习之深度卷积网络
来源:http://deeplearning.net/tutorial/lenet.html#lenet Convolutional Neural Networks (LeNet) note:这部分假 ...
- WPF EventSetter Handler Command
最近做一个工具,突然发现ListBox和ListView等列表控件的MouseDoubleClick事件有时候是获取不到当前双击的行对象数据的,比如这样写: <ListBox Grid.Row= ...
- href的那些事
很多网站中都会使用<a>标签和 href属性来做链接,尤其在分页显示中用得最普遍.然而很多人对href的使用却并不十分了解. 1.href="#" 这个在网页中上滚回顶 ...