权值线段树+动态开点[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
谁再管这玩意叫树状数组套主席树我跟谁急 明明就是树状数组的每个结点维护一棵动态开结点的权值线段树而已 好吧,其实只有一个指针,指向该结点的权值线段树的当前结点 每次查询之前,要让指针指向根结点 不同结 ...
随机推荐
- php 抽奖概率算法
lottery.php <?php //转自https://segmentfault.com/a/1190000007431893 /* * 不同概率的抽奖原理就是把0到*(比重总数)的区间分块 ...
- Hibernate_条件查询客户列表
分析:通过名称查询 实现: 1.在list.jsp中修改 2.修改ListCustomerServlet 首先获取cust_name,增加条件:若不为空,则模糊搜索,再调用Service方法,结果放到 ...
- Vijos1212 Way Selection [2017年6月计划 二分图03]
Way Selection 背景 小杉家族遭遇了前所未有的大危机 他想知道怎么逃生 描述 小杉家族r个人正在一片空地上散步,突然,外星人来了…… 留给小杉家族脱逃的时间只有t秒,每个小杉都有一个跑的速 ...
- Leetcode628.Maximum Product of Three Numbers三个数的最大乘积
给定一个整型数组,在数组中找出由三个数组成的最大乘积,并输出这个乘积. 示例 1: 输入: [1,2,3] 输出: 6 示例 2: 输入: [1,2,3,4] 输出: 24 注意: 给定的整型数组长度 ...
- 为什么我要使用Linux,使用Linux的十个理由。
Linux一来都是做为服务器运行,这些年来,Linux的图形界面已经有了很大的改善,Linux已经成为一个完善的,用户友好的桌面操作系统了,有非多常多的人在使用Linux,下面是我们认为最必要的10个 ...
- bzoj 3598 [Scoi2014]方伯伯的商场之旅——数位dp
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=3598 TJ:https://www.cnblogs.com/Zinn/p/9351218.h ...
- python-null
很早之前,遇到过一个面试官问的python中有没有null,当时有点紧张,想成了None,就脱口而出是有的.今天遇到了none问题,所以就正好说一下. python中是没有NULL的. Python中 ...
- querySelector与getElementBy系列的区别
getElementBy系列 document.getElementsByTagName('tag'); document.getElementById('id'); document.getElem ...
- Python科学计算生态圈
- docker入门 基础命令 docker安装
docker入门 在学一门新知识的时候,超哥喜欢提问,why?what?how? wiki资料 什么是docker Docker 最初是 dotCloud 公司创始人 Solomon Hykes ...