BZOJ_1503_[NOI2004]郁闷的出纳员_权值线段树
BZOJ_1503_[NOI2004]郁闷的出纳员_权值线段树
Description
Input
Output
Sample Input
I 60
I 70
S 50
F 2
I 30
S 15
A 5
F 1
F 2
Sample Output
20
-1
2
分析:
#include <stdio.h>
#include <string.h>
#include <algorithm>
using namespace std;
#define N 200050 int ls[N*18],rs[N*18],t[N*18],root=1;
int n,nowmin,add,tot=1;
char s[10];
bool tag[N*18]; void insert(int l,int r,int x,int &p){
if(!p)p=++tot;
if(l==r){
t[p]++;return ;
}
int mid=l+r>>1;
if(tag[p]){
tag[p]=0;
if(!ls[p])ls[p]=++tot;
if(!rs[p])rs[p]=++tot;
t[ls[p]]=t[rs[p]]=0;
tag[ls[p]]=tag[rs[p]]=1;
}
if(x<=mid)insert(l,mid,x,ls[p]);
else insert(mid+1,r,x,rs[p]);
t[p]=t[ls[p]]+t[rs[p]];
} void update(int l,int r,int x,int y,int &p){
if(!p)p=++tot;
if(x<=l&&y>=r){
tag[p]=1;
t[p]=0;return ;
}
int mid=l+r>>1;
if(tag[p]){
tag[p]=0;
if(!ls[p])ls[p]=++tot;
if(!rs[p])rs[p]=++tot;
t[ls[p]]=t[rs[p]]=0;
tag[ls[p]]=tag[rs[p]]=1;
}
if(x<=mid)update(l,mid,x,y,ls[p]);
if(y>mid)update(mid+1,r,x,y,rs[p]);
t[p]=t[ls[p]]+t[rs[p]];
} int getxfromrank(int l,int r,int x,int p){
if(l==r)return l;
int mid=l+r>>1;
if(tag[p]){
tag[p]=0;
if(!ls[p])ls[p]=++tot;
if(!rs[p])rs[p]=++tot;
t[ls[p]]=t[rs[p]]=0;
tag[ls[p]]=tag[rs[p]]=1;
}
if(x<=t[ls[p]])return getxfromrank(l,mid,x,ls[p]);
else return getxfromrank(mid+1,r,x-t[ls[p]],rs[p]);
} int main(){
scanf("%d%d",&n,&nowmin);
int i,j,x,now=0;
for(i=1;i<=n;i++){
scanf("%s%d",s,&x);
if(s[0]=='I'){
if(x-add<nowmin)continue;
now++;
insert(-N,N,x-add,root);
}else if(s[0]=='A'){
add+=x;
nowmin-=x;
}else if(s[0]=='S'){
add-=x;
nowmin+=x;
update(-N,N,-N,nowmin-1,root);
}else{
if(x>t[1]){
puts("-1");continue;
}
printf("%d\n",getxfromrank(-N,N,t[1]-x+1,root)+add);
}
}
printf("%d\n",now-t[1]);
}
BZOJ_1503_[NOI2004]郁闷的出纳员_权值线段树的更多相关文章
- BZOJ_2161_布娃娃_权值线段树
BZOJ_2161_布娃娃_权值线段树 Description 小时候的雨荨非常听话,是父母眼中的好孩子.在学校是老师的左右手,同学的好榜样.后来她成为艾利斯顿第二 代考神,这和小时候培养的良好素质是 ...
- BZOJ_3685_普通van Emde Boas树_权值线段树
BZOJ_3685_普通van Emde Boas树_权值线段树 Description 设计数据结构支持: 1 x 若x不存在,插入x 2 x 若x存在,删除x 3 输出当前最小值,若不存 ...
- B20J_2733_[HNOI2012]永无乡_权值线段树合并
B20J_2733_[HNOI2012]永无乡_权值线段树合并 Description:n座岛,编号从1到n,每座岛都有自己的独一无二的重要度,按照重要度可以将这n座岛排名,名次用1到 n来表示.某些 ...
- [bzoj2733][HNOI2012]永无乡_权值线段树_线段树合并
永无乡 bzoj-2733 HNOI-2012 题目大意:题目链接. 注释:略. 想法: 它的查询操作非常友善,就是一个联通块内的$k$小值. 故此我们可以考虑每个联通块建一棵权值线段树. 这样的话每 ...
- [jdoj1258]野生动物园(change by panxf)_权值线段树_组合数
人品计算 题目大意:n个数的a序列,m组询问.每次询问给出T,A,B,K.求在a序列的[A,B]的位置之内的K小值P,的$C_{T}^{P \% T} \% 10111$. 注释:每组询问保证区间只相 ...
- 3065: 带插入区间K小值_树套树_替罪羊树_权值线段树
经过周六一天,周一3个小时的晚自习,周二2个小时的疯狂debug,终于凭借自己切掉了这道树套树题. Code: #include <cstdio> #include <algorit ...
- BZOJ-1563-郁闷的出纳员(权值线段树)
偏移量要考虑清楚. #include <bits/stdc++.h> using namespace std; const int N=4e5+10; const int BASE=1e5 ...
- bzoj 1503: [NOI2004]郁闷的出纳员 -- 权值线段树
1503: [NOI2004]郁闷的出纳员 Time Limit: 5 Sec Memory Limit: 64 MB Description OIER公司是一家大型专业化软件公司,有着数以万计的员 ...
- P1486 [NOI2004]郁闷的出纳员[权值线段树]
权值线段树. 我们只用维护一个人是否存在,以及他当前排名,而不关心工资的具体值,这个可以直接算. 不难发现,如果不考虑新的员工,所有员工的工资的差值是不变的. 而加进来一个新的员工时,其工资为\(x\ ...
随机推荐
- centos下 redmind2.6安装
1.下载安装redmind有关软件 cd /tmp wget http://cache.ruby-lang.org/pub/ruby/2.1/ruby-2.1.5.tar.gz wget http:/ ...
- IT轮子系列(三)——如何给返回类型添加注释——Swagger的使用(二)
前言 一般对外提供API,都会统一一个返回类型,比如所有的接口都统一返回HttpResponseMessage.这样当我们在方法上添加///注释时,是无法清楚的知道都返回字段都又那些以及它们的数据类型 ...
- 途牛java实习面试(失败)
一进去让自己介绍.简单介绍了一下.然后让我自己说说框架.问题太大一紧张卡住了. 然后面试官开始问,让我介绍多线程,我就简单介绍了多线程.然后问我有没有做过多线程的项目,我说没有. 问了MySQL的锁和 ...
- Mybatis解决jdbc编程的问题
1.1.1 Mybatis解决jdbc编程的问题 1. 数据库链接创建.释放频繁造成系统资源浪费从而影响系统性能,如果使用数据库链接池可解决此问题. 解决:在SqlMapConfig.xml中配置 ...
- Storm 常用命令
1.启动Nimbus bin/storm nimbus & 2.启动Supervisor bin/storm supervisor & 3.启动UI bin/storm ui & ...
- spring中一些aware接口
Spring中提供一些Aware相关接口,像是BeanFactoryAware. ApplicationContextAware.ResourceLoaderAware.ServletContextA ...
- vue项目通过webpack打包生成的dist文件放到express环境里运行(vue+webpack+express)
1.首先需要的原料肯定是vue打包生成的dist文件 在vue项目目录下运行:npm run build,等待运行结束,会在项目目录下生成一个dist文件夹,里面会生成一些文件(如下图示) 小的项目文 ...
- 用js实现算法:冒泡排序、插入排序和快速排序
一.冒泡排序 function bubbleSort(arr){ for(var i=0;i<arr.length;i++){ for(var j=0;j<arr.length-i-1;j ...
- href="#" 是什么意思?
<a href="#" onclick="process1()">开始你表演</a>作用:书签的另一种用法建立书签语法:<a na ...
- Node笔记五-进程、线程
进程 -每一个正在运行的应用程序都称之为进程 -每一个应用程序都至少有一个进程 -进程是用来给应用程序提供一个运行的环境 -进程是操作系统为应用程序分配资源的一个单位线程 -用来执行应用程序中的代码 ...