#include<iostream>
#include<stdio.h>
#include<algorithm>
#include<string.h>
#define rep(i,j,k) for(int i=j;i<=k;i++)
#define per(i,j,k) for(int i=j;i>=k;i--)
using namespace std;
const int maxx = 2e5+;
int lson[maxx*],rson[maxx*],sum[maxx*];
int tot=,root=;
bool laze[maxx*];
void push_down(int x){
if(laze[x]){
if(!lson[x])lson[x]=++tot;
if(!rson[x])rson[x]=++tot;
sum[lson[x]]=;
sum[rson[x]]=;
laze[lson[x]]=;
laze[rson[x]]=;
laze[x]=;
}
}
void inserts(int l,int r,int x,int &p){
if(!p)p=++tot;
if (l==r){
sum[p]++;
return;
}
int mid=(l+r)>>;
push_down(p);
if (x<=mid){
inserts(l,mid,x,lson[p]);
}else {
inserts(mid+,r,x,rson[p]);
}
sum[p]=sum[lson[p]]+sum[rson[p]];
}
void update(int l,int r,int ul,int ur,int &p){
if (!p)p=++tot;
if (ul<=l && r<=ur){
sum[p]=;
laze[p]=;
return;
}
push_down(p);
int mid=(l+r)>>;
if(ul<=mid)update(l,mid,ul,ur,lson[p]);
if(ur>mid)update(mid+,r,ul,ur,rson[p]);
sum[p]=sum[lson[p]]+sum[rson[p]];
}
int kth(int l,int r,int k,int &p){
if(l==r){
return l;
}
int mid=(l+r)>>;
push_down(p);
if(k<=sum[lson[p]]){
return kth(l,mid,k,lson[p]);
}else {
return kth(mid+,r,k-sum[lson[p]],rson[p]);
}
}
int main(){
int n,m,w;
int add=,nowmin,num=;
char op[];
while(~scanf("%d%d",&n,&nowmin)){
rep(i,,n){
scanf("%s%d",op,&w);
if (op[]=='I'){
//减去影响后如果起薪小于工资下界
if (w-add<nowmin)continue;
//他的工资实际上应该是他的起
inserts(-maxx,maxx,w-add,root);
num++;
}else if(op[]=='A'){
//偏移应该加上
add+=w;
//同时此时要求最低的工资降低
nowmin-=w;
}else if(op[]=='S'){
add-=w;
nowmin+=w;
//比最低工资低的值全部赋值为0
update(-maxx,maxx,-maxx,nowmin-,root);
}else {
//如果所有人被开除
if(w>sum[]){
printf("-1\n");
continue;
}else {
//查询剩下的第K大,并且要加上偏移
//其实等价于查询当前第K大=总数-第K小+1
printf("%d\n",kth(-maxx,maxx,sum[]-w+,root)+add);
}
}
}
printf("%d\n",num-sum[]);
}
return ;
}

权值线段树+动态开点[NOI2004]郁闷的出纳员的更多相关文章

  1. cogs 1829. [Tyvj 1728]普通平衡树 权值线段树

    1829. [Tyvj 1728]普通平衡树 ★★★   输入文件:phs.in   输出文件:phs.out   简单对比时间限制:1 s   内存限制:1000 MB [题目描述] 您需要写一种数 ...

  2. luogu3224 永无乡(动态开点,权值线段树合并)

    luogu3224 永无乡(动态开点,权值线段树合并) 永无乡包含 n 座岛,编号从 1 到 n ,每座岛都有自己的独一无二的重要度,按照重要度可以将这 n 座岛排名,名次用 1 到 n 来表示.某些 ...

  3. P2617 Dynamic Rankings (动态开点权值线段树 + 树状数组)

    题意:带修求区间k小 题解:回忆在使用主席树求区间k小时 利用前缀和的思想 既然是前缀和 那么我们可以使用更擅长维护前缀和的树状数组 但是这里每一颗权值线段树就不是带版本的 而是维护数组里i号点的权值 ...

  4. [BZOJ 3295] [luogu 3157] [CQOI2011]动态逆序对(树状数组套权值线段树)

    [BZOJ 3295] [luogu 3157] [CQOI2011] 动态逆序对 (树状数组套权值线段树) 题面 给出一个长度为n的排列,每次操作删除一个数,求每次操作前排列逆序对的个数 分析 每次 ...

  5. 动态求区间K大值(权值线段树)

    我们知道我们可以通过主席树来维护静态区间第K大值.我们又知道主席树满足可加性,所以我们可以用树状数组来维护主席树,树状数组的每一个节点都可以开一颗主席树,然后一起做. 我们注意到树状数组的每一棵树都和 ...

  6. BZOJ_1503_[NOI2004]郁闷的出纳员_权值线段树

    BZOJ_1503_[NOI2004]郁闷的出纳员_权值线段树 Description OIER公司是一家大型专业化软件公司,有着数以万计的员工.作为一名出纳员,我的任务之一便是统计每位员工的 工资. ...

  7. bzoj 1503: [NOI2004]郁闷的出纳员 -- 权值线段树

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

  8. P1486 [NOI2004]郁闷的出纳员[权值线段树]

    权值线段树. 我们只用维护一个人是否存在,以及他当前排名,而不关心工资的具体值,这个可以直接算. 不难发现,如果不考虑新的员工,所有员工的工资的差值是不变的. 而加进来一个新的员工时,其工资为\(x\ ...

  9. 【树状数组套权值线段树】bzoj1901 Zju2112 Dynamic Rankings

    谁再管这玩意叫树状数组套主席树我跟谁急 明明就是树状数组的每个结点维护一棵动态开结点的权值线段树而已 好吧,其实只有一个指针,指向该结点的权值线段树的当前结点 每次查询之前,要让指针指向根结点 不同结 ...

随机推荐

  1. java-异常处理1

    概要图 异常讲解流程图 一 java 异常和错误层次图 1.1 图1 1.2 图2 二 异常生的过程 1 异常可以结束函数. 同时也让程序结束了. 三 异常和错误的发生和区别 Java运行时期发生的问 ...

  2. uptime查看服务器运行时间

    uptime命令用于查看服务器运行了多长时间以及有多少个用户登录,快速获知服务器的负荷情况. uptime的输出包含一项内容是load average,显示了最近1,5,15分钟的负荷情况.它的值代表 ...

  3. linux升级或安装程序后无法进入图形界面

    报错如下: Failed to start the X server (your graphical interface). lt is likely that it is not set up co ...

  4. P1561 [USACO12JAN]爬山Mountain Climbing

    P1561 [USACO12JAN]爬山Mountain Climbing 题目描述 Farmer John has discovered that his cows produce higher q ...

  5. Ubuntu 安装 RabbitMQ 和PHP扩展 - CSDN博客

    1.ubuntu16.04中安装RabbitMQ 1).首先必须要有Erlang环境支持 安装之前要装一些必要的库: sudo apt-get install build-essential  sud ...

  6. AspNet 常有功能函数1.0

    1.net 获取客户端ip方法(此方法不是很准确) public static string GetIP() { string str; if (!string.IsNullOrEmpty(HttpC ...

  7. Hdu 4751(2-SAT)

    题目链接 Divide Groups Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Other ...

  8. Div+CSS常见错误总结

    CSS+DIV是网站标准(或称“WEB标准”)中常用的术语之一,通常为了说明与HTML网页设计语言中的表格(table)定位方式的区别,因为XHTML网站设计标准中,不再使用表格定位技术,而是采用cs ...

  9. js读取解析JSON数据(转)

    JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式,采用完全独立于语言的文本格式,是理想的数据交换格式.同时,JSON是 JavaScript 原生格式,这意 ...

  10. The 16th UESTC Programming Contest Final 游记

    心情不好来写博客. 为了满足ykk想要气球的愿望,NicoDafaGood.Achen和我成功去神大耍了一圈. 因为队名一开始是LargeDumpling应援会,然后队名被和谐,变成了学校的名字,顿时 ...