洛谷P1486 [NOI2004]郁闷的出纳员
Code:
#include<cstdio>
#include<algorithm>
using namespace std;
struct Node{
int s,val,tag,v;
Node *ch[2];
Node(int u){
s=1,val=1,tag=0,v=u;
ch[0]=ch[1]=NULL;
}
int cmp(int x,int ty){
if(ty==0){
if(x<v)return 0;if(x==v)return -1;return 1;
}
else{
int lsize=ch[0]==NULL?0:ch[0]->s;
if(x<=lsize)return 0;if(x<=lsize+val)return -1;return 1;
}
}
int ls(){if(ch[0]==NULL)return 0;return ch[0]->s;}
void maintain(){
s=val;
if(ch[0]!=NULL)s+=ch[0]->s;
if(ch[1]!=NULL)s+=ch[1]->s;
}
void push_down(){
if(tag!=0){
if(ch[0]!=NULL)ch[0]->tag+=tag;
if(ch[1]!=NULL)ch[1]->tag+=tag;
v+=tag,tag=0;
}
}
};
void rotate(Node* &o,int d){
Node *k=o->ch[d^1];o->ch[d^1]=k->ch[d];k->ch[d]=o;
o->maintain();k->maintain();o=k;
}
void splay(Node* &o,int x,int ty){
o->push_down();
int d=o->cmp(x,ty);
if(ty==1&&d==1)x-=o->ls()+o->val;
if(d!=-1){
Node *p=o->ch[d];
p->push_down();
int d2=p->cmp(x,ty);
if(ty==1&&d2==1)x-=p->ls()+p->val;
if(d2!=-1){
splay(p->ch[d2],x,ty);
if(d==d2)
rotate(o,d^1);
else
rotate(o->ch[d],d2^1);
}
rotate(o,d^1);
}
}
void insert(Node* &o,int x){
if(o==NULL){
o=new Node(x);return;
}
o->push_down();
int d=o->cmp(x,0);
if(d==-1){
++(o->val);++(o->s);return;
}
insert(o->ch[d],x);
o->maintain();
}
int minn;
void qianqu(Node *o,int k){
if(o==NULL)return;
o->push_down();
int d=o->cmp(k,0);
if(d<1)
qianqu(o->ch[0],k);
else{
minn=max(minn,o->v);
qianqu(o->ch[1],k);
}
}
Node *head;
int main()
{
int n,minv,cnt_leave=0;
scanf("%d%d",&n,&minv);
for(int i=1;i<=n;++i)
{
char A[4];int k;
scanf("%s",A);scanf("%d",&k);
if(A[0]=='I'){
if(k>=minv){
insert(head,k);
splay(head,k,0);
}
//else ++cnt_leave;
}
if(A[0]=='A'&&head!=NULL)head->tag+=k;
if(A[0]=='S'&&head!=NULL){
head->tag-=k;minn=-1000000;
qianqu(head,minv);
if(minn!=-1000000){
splay(head,minn,0);
cnt_leave+=head->ls()+head->val;
if(head->ch[1]!=NULL)head=head->ch[1];
else head=NULL;
}
}
if(A[0]=='F'){
int tot=head==NULL?0:head->s;
if(k>tot)printf("-1\n");
else{
splay(head,tot-k+1,1);
printf("%d\n",head->v);
}
}
}
printf("%d\n",cnt_leave);
return 0;
}
洛谷P1486 [NOI2004]郁闷的出纳员的更多相关文章
- 洛谷P1486 [NOI2004]郁闷的出纳员 [STL,平衡树]
题目传送门 郁闷的出纳员 题目描述 OIER公司是一家大型专业化软件公司,有着数以万计的员工.作为一名出纳员,我的任务之一便是统计每位员工的工资.这本来是一份不错的工作,但是令人郁闷的是,我们的老板反 ...
- 洛谷 P1486 [NOI2004]郁闷的出纳员【Treap】题解+AC代码
题目描述 OIER公司是一家大型专业化软件公司,有着数以万计的员工.作为一名出纳员,我的任务之一便是统计每位员工的工资.这本来是一份不错的工作,但是令人郁闷的是,我们的老板反复无常,经常调整员工的工资 ...
- 洛谷P1486 [NOI2004]郁闷的出纳员(splay)
题目描述 OIER公司是一家大型专业化软件公司,有着数以万计的员工.作为一名出纳员,我的任务之一便是统计每位员工的工资.这本来是一份不错的工作,但是令人郁闷的是,我们的老板反复无常,经常调整员工的工资 ...
- 洛谷 P1486 [NOI2004]郁闷的出纳员
题目描述 OIER公司是一家大型专业化软件公司,有着数以万计的员工.作为一名出纳员,我的任务之一便是统计每位员工的工资.这本来是一份不错的工作,但是令人郁闷的是,我们的老板反复无常,经常调整员工的工资 ...
- 洛谷.1486.[NOI2004]郁闷的出纳员(Splay)
题目链接 /* BZOJ1503: 3164kb 792ms/824ms(新建节点) 洛谷 : 3.06mb 320ms/308ms(前一个要慢wtf 其实都差不多,但前者好写) 四种操作: A:所有 ...
- 【洛谷P1486】郁闷的出纳员
题目大意:维护一个平衡树,支持插入一个数,删除小于一个值的所有数,K 大值查询,每个节点权值加减一个数. 题解:所有节点权值加减操作可以考虑直接维护一个全局标记,删除小于一个值的所有数字为一个二分的过 ...
- P1486 [NOI2004]郁闷的出纳员
P1486 [NOI2004]郁闷的出纳员 题目描述 OIER公司是一家大型专业化软件公司,有着数以万计的员工.作为一名出纳员,我的任务之一便是统计每位员工的工资.这本来是一份不错的工作,但是令人郁闷 ...
- Luogu P1486 [NOI2004]郁闷的出纳员(平衡树)
P1486 [NOI2004]郁闷的出纳员 题意 题目描述 \(OIER\)公司是一家大型专业化软件公司,有着数以万计的员工.作为一名出纳员,我的任务之一便是统计每位员工的工资.这本来是一份不错的工作 ...
- 洛谷$P$1486 郁闷的出纳员 $[NOI2004]$ $splay$
正解:$splay$ 解题报告: 传送门! 依然先考虑要呲呲些什么操作鸭$QwQ$ 其实就只要一个删除区间,一个查询第$k$大,还一个插入就欧克? 删除区间的话直接旋转下根什么的然后直接把子树删了就好 ...
随机推荐
- 第一个GTK程序
/*我已经把代码写在此处 希望借鉴和完善!一起加油奥(PS:我的QQ是1693672542欢迎加我一起进行探讨学习奥!!!)*/#include <stdio.h>#include< ...
- VIM 使用 匹配替换命令配合表达式 实现 递增替换
:let n=100 | g/while/s/\d/\=n / | let n=n+1 before 10 void *thread_function_1(void *arg) { 11 int i; ...
- LCS,LIS,LCIS
网站:CSUST 8月3日(LCS,LIS,LCIS) LCS: 以下讲解来自:http://blog.csdn.net/yysdsyl/article/details/4226630 [问 ...
- C#--线程池与线程的种类
.NET CLR线程的种类 至少3个线程:主线程.调试线程.终结器线程 1.main thread 2.worker thread 3.finalizer thread 4.debugger help ...
- nyoj-664-数字整除(水题)
数字整除 时间限制:1000 ms | 内存限制:65535 KB 难度: 描写叙述 定理:把一个至少两位的正整数的个位数字去掉,再从余下的数中减去个位数的5倍.当且仅当差是17的倍数时.原数也是 ...
- [React] Refactor componentWillReceiveProps() to getDerivedStateFromProps() in React 16.3
The componentWillReceiveProps() method is being deprecated in future version of React (17). Many of ...
- Spring技术内幕:SpringIOC原理学习总结
前一段时候我把Spring技术内幕的关于IOC原理一章看完,感觉代码太多,不好掌握,我特意又各方搜集了一些关于IOC原理的资料,特加深一下印象,以便真正掌握IOC的原理. IOC的思想是:Spring ...
- sql格式化日期
SELECT CONVERT(date, GETDATE()) ---- SELECT CONVERT(varchar(), GETDATE(), ) ----
- GET,POST,PUT,DELETE的区别 和 用法
Http定义了与服务器交互的不同方法,最基本的方法有4种,分别是GET,POST,PUT,DELETE.URL全称是资源描述符,我们可以这样认为:一个URL地址,它用于描述一个网络上的资源,而HTTP ...
- 使用spring mvc或者resteasy构建restful服务
看到最近一个项目里用resteasy来构建restful接口,有点不明白,不少Spring mvc4.0以后也可以很方面的实现restful服务吗,为啥还要在Spring MVC的项目里还引入rest ...