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\ ...
随机推荐
- 更改一个链接的文本、URL 以及 target
<html> <head> <script type="text/javascript"> function changeLink() { do ...
- Storyboard中ViewController加载的四种方式
这个总结来自于<Programming iOS 10>一书: 1.storyboard的初始化ViewController,通过方法instantiateInitialViewContro ...
- 推荐个Mac OSX下的Code Editor:Atom
首先只是当Editor用,不是整成IDE级. 先说几个大家耳熟能详的: 1.Sublime,Sublime在Mac下的安装并不完全,CLI启动需要自己ln个链接.还有一些其他原因,比如Packages ...
- Flask类的属性和方法大全
Flask Property__class____dict____doc____module__app_ctx_globals_classconfig_classdebugdefault_config ...
- jQuery的学习笔记4
JQuery学习笔记3 2.9属性选择器 属性选择器就是根据元素的属性和属性值作为过滤条件,来匹配对应的DOM元素.属性选择器一般都以中括号作为起止分界符 它的形式如下: [attribute] [a ...
- HTML学习笔记:2.基础语法
HTML基本结构 HTML标签 HTML元素 HTML属性 注释 ①基本结构 <html> html:指明是个html文件 <head> <title>标题< ...
- 学习笔记 C++ 链表
今天查了不少关于链表的资料大概理解了链表,为记录只用留笔于此. 链表概述:动态的数据存储单元,可以比数组更加灵活. 链表的组成:存储的数据,下一个节点. 首先让我们用代码完成一个节点. class N ...
- Django REST framework+Vue 打造生鲜超市(十三)
目录 生鲜超市(一) 生鲜超市(二) 生鲜超市(三) 生鲜超市(四) 生鲜超市(五) 生鲜超市(六) 生鲜超市(七) 生鲜超市(八) 生鲜超市(九) 生鲜超市(十) ...
- windows下virtualenv中安装MySQL-python
先在正常的环境下安装 MySQL-python-1.2.3.win-amd64-py2.7.exe (用everything搜索一下就出来) 然后到 C:\Python27\Lib\site-pack ...
- CSS弹性盒子的基本用法
.container { width: 302px; height: 302px; border: 1px solid; display: flex } .item { width: 100px; h ...