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—郁闷的出纳员的更多相关文章

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

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

  2. bzoj1503 [NOI2004]郁闷的出纳员(名次树+懒惰标记)

    1503: [NOI2004]郁闷的出纳员 Time Limit: 5 Sec  Memory Limit: 64 MBSubmit: 8705  Solved: 3027[Submit][Statu ...

  3. [BZOJ1503][NOI2004]郁闷的出纳员 无旋Treap

    1503: [NOI2004]郁闷的出纳员 Time Limit: 5 Sec  Memory Limit: 64 MB Description OIER公司是一家大型专业化软件公司,有着数以万计的员 ...

  4. bzoj1503: [NOI2004]郁闷的出纳员(伸展树)

    1503: [NOI2004]郁闷的出纳员 题目:传送门 题解: 修改操作一共不超过100 直接暴力在伸展树上修改 代码: #include<cstdio> #include<cst ...

  5. [BZOJ1503] [NOI2004] 郁闷的出纳员 (treap)

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

  6. BZOJ1503[NOI2004]郁闷的出纳员——treap

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

  7. [luogu1486][bzoj1503][NOI2004]郁闷的出纳员【平衡树treap】

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

  8. BZOJ1503: [NOI2004]郁闷的出纳员(Splay)

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

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

    原文链接http://www.cnblogs.com/zhouzhendong/p/8086240.html 题目传送门 - BZOJ1503 题意概括 如果某一个员工的工资低于了min,那么,他会立 ...

  10. 【题解】 bzoj1503: [NOI2004]郁闷的出纳员 (Splay)

    bzoj1503,懒得复制,戳我戳我 Solution: 我知不知道我是那根筋抽了突然来做splay,调了起码\(3h+\),到第二天才改出来(我好菜啊),当做训练调错吧 一个裸的splay,没啥好说 ...

随机推荐

  1. 恢复Reflector反编译后资源文件的办法

    反编译问题: 1.路径问题:如果遇到了Path.Combine,有错误改下即可 2.资源文件问题: 在Reflector下,对左边的资源管理窗口的Resources文件夹下的资源文件,进行右键点击,选 ...

  2. 【C#】【Thread】Semaphore/SemaphoreSlim信号量

    System.Threading.Semaphore 类表示一个命名(系统范围)信号量或本地信号量. 它是一个对 Win32 信号量对象的精简包装. Win32 信号量是计数信号量,可用于控制对资源池 ...

  3. SharePoint 2010自定义母版页小技巧——JavaScript和CSS引用

    通常在我们的项目中,都会涉及到母版页的定制.并且必不可少的,需要配合以一套自己的JavaScript框架和CSS样式.你有没有遇到过这样的情况呢,在开发环境和UAT时都还算顺利,但是当最终部署到生产服 ...

  4. Utrack声卡和机架包的调试

    视频链接http://www.tudou.com/programs/view/giZZ7b2dhn4/ 关于怎么调试这个问题困扰了我几个月之久,也没人教我,我也不知道问谁,搜又搜不到,所幸现在解决了问 ...

  5. 求最长回文子串 - leetcode 5. Longest Palindromic Substring

    写在前面:忍不住吐槽几句今天上海的天气,次奥,鞋子里都能养鱼了...裤子也全湿了,衣服也全湿了,关键是这天气还打空调,只能瑟瑟发抖祈祷不要感冒了.... 前后切了一百零几道leetcode的题(sol ...

  6. go println与printf区别

    Println 与Printf 都是fmt 包中的公共方法 Println :可以打印出字符串,和变量: Printf : 只可以打印出格式化的字符串,可以输出字符串类型的变量,不可以输出整形变量和整 ...

  7. eclipse技巧总结

       如果遇到错误或警告,先试试统一的方法:在problems view中,右键error或者warnning,选择quick fix serial ID并不常用,如果不实现它,eclipse会给出一 ...

  8. Java Little Knowledge

    1.Constructor running order of Base class and Derived class This is Alibaba's audition problem. clas ...

  9. .net MVC全球化资源使用心得

    网上有的我就不说了,我只记录下我碰壁的事情. local资源就不说,这里只说global全局资源文件. 假设新建一个资源文件名称叫做resourceA, 下面几点记录备忘: resouceA就是Get ...

  10. hibernate的hql查询

    1.概念介绍 1.Query是Hibernate的查询接口,用于从数据存储源查询对象及控制执行查询的过程,Query包装了一个HQL查询语句. 2.HQL是Hibernate Query Langua ...