权值线段树+动态开点[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
谁再管这玩意叫树状数组套主席树我跟谁急 明明就是树状数组的每个结点维护一棵动态开结点的权值线段树而已 好吧,其实只有一个指针,指向该结点的权值线段树的当前结点 每次查询之前,要让指针指向根结点 不同结 ...
随机推荐
- P1561 [USACO12JAN]爬山Mountain Climbing
P1561 [USACO12JAN]爬山Mountain Climbing 题目描述 Farmer John has discovered that his cows produce higher q ...
- SaaS launch Kit成回收宝和友盟云合作纽带,帮助提升3倍上云效率
导语:叶飞表示,全球二手手机市场未来几年将发生巨大变革, 回收宝正进行积极布局.与阿里云开展紧密技术合作,回收宝期待成为这一变革的引领者. 7月26日,在阿里云上海峰会上,阿里云了发布SaaS生态战略 ...
- JetBrains PyCharm 2017.2 字体放大缩小 功能
- 百度DMLC分布式深度机器学习开源项目(简称“深盟”)上线了如xgboost(速度快效果好的Boosting模型)、CXXNET(极致的C++深度学习库)、Minerva(高效灵活的并行深度学习引擎)以及Parameter Server(一小时训练600T数据)等产品,在语音识别、OCR识别、人脸识别以及计算效率提升上发布了多个成熟产品。
百度为何开源深度机器学习平台? 有一系列领先优势的百度却选择开源其深度机器学习平台,为何交底自己的核心技术?深思之下,却是在面对业界无奈时的远见之举. 5月20日,百度在github上开源了其 ...
- 2017年浙工大迎新赛热身赛 A 毕业设计选题 【结构体排序】
时间限制:C/C++ 1秒,其他语言2秒空间限制:C/C++ 65536K,其他语言131072K64bit IO Format: %lld 题目描述 又到了一年一度,大四老学长们毕业设计选题的时候, ...
- Codeforces Round #189 (Div. 2) A. Magic Numbers【正难则反/给出一个数字串判断是否只由1,14和144组成】
A. Magic Numbers time limit per test 2 seconds memory limit per test 256 megabytes input standard in ...
- PHP核心编程--文件上传(包含多文件上传)
一.单文件上传 图片上传界面: <!DOCTYPE html> <html lang="en"> <head> <meta charset ...
- Directx11教程(3) 一个最基本D3D应用程序(1)
原文:Directx11教程(3) 一个最基本D3D应用程序(1) 在前一篇教程程序代码的基础上,这次我们将增加2个类: InputClass,键盘处理的代码将放在这个类里面,Graphi ...
- mongodb的一些简单操作
mongo 使用 mongod 开机mongod --dbpath c:\mongo mongod --storageEngine mmapv1 --dbpath c:\mongo mongoimpo ...
- JavaScript--for in循环访问属性用"."和[ ]的区别
// for in 循环遍历对象的时候// 内部要访问属性的时候不能点语法访问,因为for in 的key是字符串格式// 可通过方括号实现访问 for(var key in manObj) { co ...