权值线段树+动态开点[NOI2004]郁闷的出纳员
#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]郁闷的出纳员的更多相关文章
- cogs 1829. [Tyvj 1728]普通平衡树 权值线段树
1829. [Tyvj 1728]普通平衡树 ★★★ 输入文件:phs.in 输出文件:phs.out 简单对比时间限制:1 s 内存限制:1000 MB [题目描述] 您需要写一种数 ...
- luogu3224 永无乡(动态开点,权值线段树合并)
luogu3224 永无乡(动态开点,权值线段树合并) 永无乡包含 n 座岛,编号从 1 到 n ,每座岛都有自己的独一无二的重要度,按照重要度可以将这 n 座岛排名,名次用 1 到 n 来表示.某些 ...
- P2617 Dynamic Rankings (动态开点权值线段树 + 树状数组)
题意:带修求区间k小 题解:回忆在使用主席树求区间k小时 利用前缀和的思想 既然是前缀和 那么我们可以使用更擅长维护前缀和的树状数组 但是这里每一颗权值线段树就不是带版本的 而是维护数组里i号点的权值 ...
- [BZOJ 3295] [luogu 3157] [CQOI2011]动态逆序对(树状数组套权值线段树)
[BZOJ 3295] [luogu 3157] [CQOI2011] 动态逆序对 (树状数组套权值线段树) 题面 给出一个长度为n的排列,每次操作删除一个数,求每次操作前排列逆序对的个数 分析 每次 ...
- 动态求区间K大值(权值线段树)
我们知道我们可以通过主席树来维护静态区间第K大值.我们又知道主席树满足可加性,所以我们可以用树状数组来维护主席树,树状数组的每一个节点都可以开一颗主席树,然后一起做. 我们注意到树状数组的每一棵树都和 ...
- BZOJ_1503_[NOI2004]郁闷的出纳员_权值线段树
BZOJ_1503_[NOI2004]郁闷的出纳员_权值线段树 Description OIER公司是一家大型专业化软件公司,有着数以万计的员工.作为一名出纳员,我的任务之一便是统计每位员工的 工资. ...
- bzoj 1503: [NOI2004]郁闷的出纳员 -- 权值线段树
1503: [NOI2004]郁闷的出纳员 Time Limit: 5 Sec Memory Limit: 64 MB Description OIER公司是一家大型专业化软件公司,有着数以万计的员 ...
- P1486 [NOI2004]郁闷的出纳员[权值线段树]
权值线段树. 我们只用维护一个人是否存在,以及他当前排名,而不关心工资的具体值,这个可以直接算. 不难发现,如果不考虑新的员工,所有员工的工资的差值是不变的. 而加进来一个新的员工时,其工资为\(x\ ...
- 【树状数组套权值线段树】bzoj1901 Zju2112 Dynamic Rankings
谁再管这玩意叫树状数组套主席树我跟谁急 明明就是树状数组的每个结点维护一棵动态开结点的权值线段树而已 好吧,其实只有一个指针,指向该结点的权值线段树的当前结点 每次查询之前,要让指针指向根结点 不同结 ...
随机推荐
- 2019-3-1-win10-uwp-发布旁加载自动更新
title author date CreateTime categories win10 uwp 发布旁加载自动更新 lindexi 2019-03-01 09:40:27 +0800 2019-0 ...
- sar磁盘I/O统计数据
sar是一个研究磁盘I/O的优秀工具.以下是sar磁盘I/O输出的一个示例. 第一行-d显示磁盘I/O信息,5 2选项是间隔和迭代,就像sar数据收集器那样.表3-3列出了字段和说明. 表3-3 ...
- Codevs2490 导弹防御塔
2490 导弹防御塔 2490 导弹防御塔 时间限制: 1 s 空间限制: 64000 KB 题目等级 : 大师 Master 题目描述 Description Freda的城堡—— ...
- 洛谷P2903 [USACO08MAR]麻烦的干草打包机The Loathesome Hay Baler
P2903 [USACO08MAR]麻烦的干草打包机The Loathesome Hay Baler 题目描述 Farmer John has purchased the world's most l ...
- ant详细介绍
Ant的概念 可能有些读者并不连接什么是Ant以及入可使用它,但只要使用通过Linux系统得读者,应该知道make这个命令.当编译Linux内核及一些软件的源程序时,经常要用这个命令.Make命令 ...
- 模拟19 题解(waiting)
T1,千万别转化成链了!! 直接数就可以,dfs搜索每种情况,对于搜到的点,如果子树大小过大,直接return,相等说明可以,小的话向上累加, 优化是先预处理子树大小,若子树小,不用搜了直接加上就行 ...
- 拦截导弹 (最长上升子序列LIS)
#include <iostream> #include <stdio.h> #include <algorithm> using namespace std; ] ...
- 蚁群算法MATLAB解TSP问题
Excel表exp12_3_1.xls中数据为: clc clear all [xdata,textdata]=xlsread('exp12_3_1.xls'); %加载20个城市的数据,数据按照表格 ...
- Linux下安装配置maven
参考博客: http://www.blogjava.net/caojianhua/archive/2011/04/02/347559.html 注意事项: 1.解压目录 我的maven解压目录为: / ...
- CSS:命名规范心得分享
一个好的命名习惯(当然这里指的并不仅仅是CSS命名).不仅可以提高开发效率,而且有益于后期修改和维护. 假设我们当前使用的命名方式都是约定成俗的,所有人都是这样写,那么你去到一个新团队,或者别人来接手 ...