luogu1486 郁闷的出纳员

treap

#include <iostream>
#include <cstdlib>
#include <cstdio>
using namespace std;
int n, x, minn, delta=0, ans, rot=0, sze=0, val[100005], siz[100005], cnt[100005];
int l[100005], r[100005], rnd[100005];
char s[15];
void upd(int x){
    siz[x] = siz[l[x]] + siz[r[x]] + cnt[x];
}
void lRotate(int &k){
    int t=r[k]; r[k] = l[t]; l[t] = k;
    siz[t] = siz[k]; upd(k); k = t;
}
void rRotate(int &k){
    int t=l[k]; l[k] = r[t]; r[t] = k;
    siz[t] = siz[k]; upd(k); k = t;
}
void ins(int &k, int x){
    if(!k){
        k = ++sze; l[k] = r[k] = 0; val[k] = x;
        siz[k] = cnt[k] = 1; rnd[k] = rand();
        return ;
    }
    siz[k]++;
    if(val[k]==x)   cnt[k]++;
    else if(val[k]<x){
        ins(r[k], x);
        if(rnd[r[k]]<rnd[k])    lRotate(k);
    }
    else{
        ins(l[k], x);
        if(rnd[l[k]]<rnd[k])    rRotate(k);
    }
}
int del(int &k, int x){
    if(!k)  return 0;
    if(val[k]<x){
        int t=siz[l[k]]+cnt[k]; k = r[k];
        return t+del(k, x);
    }
    else{
        int t = del(l[k], x);
        siz[k] -= t;
        return t;
    }
}
int queryNum(int k, int x){
    if(!k)  return 0;
    if(siz[l[k]]>=x)    return queryNum(l[k], x);
    else if(x>siz[l[k]]+cnt[k]) return queryNum(r[k], x-siz[l[k]]-cnt[k]);
    else return val[k];
}
int main(){
    cin>>n>>minn;
    while(n--){
        scanf("%s %d", s, &x);
        if(s[0]==‘I‘){
            if(x>=minn)
                ins(rot, x-delta);
        }
        if(s[0]==‘A‘)   delta += x;
        if(s[0]==‘S‘){
            delta -= x;
            ans += del(rot, minn-delta);
        }
        if(s[0]==‘F‘){
            if(x>siz[rot])  printf("-1\n");
            else printf("%d\n", queryNum(rot, siz[rot]-x+1)+delta);
        }
    }
    printf("%d\n", ans);
    return 0;
}
时间: 2024-08-30 16:02:51

luogu1486 郁闷的出纳员的相关文章

Luogu1486郁闷的出纳员【Splay】

P1486 郁闷的出纳员 题目描述 OIER公司是一家大型专业化软件公司,有着数以万计的员工.作为一名出纳员,我的任务之一便是统计每位员工的工资.这本来是一份不错的工作,但是令人郁闷的是,我们的老板反复无常,经常调整员工的工资.如果他心情好,就可能把每位员工的工资加上一个相同的量.反之,如果心情不好,就可能把他们的工资扣除一个相同的量.我真不知道除了调工资他还做什么其它事情. 工资的频繁调整很让员工反感,尤其是集体扣除工资的时候,一旦某位员工发现自己的工资已经低于了合同规定的工资下界,他就会立刻

1503: [NOI2004]郁闷的出纳员 Treap

1503: [NOI2004]郁闷的出纳员 Time Limit: 5 Sec  Memory Limit: 64 MBSubmit: 6263  Solved: 2190[Submit][Status] Description OIER公司是一家大型专业化软件公司,有着数以万计的员工.作为一名出纳员,我的任务之一便是统计每位员工的工资.这本来是一份不错的工作,但是令人郁闷的是,我们的老板反复无常,经常调整员工的工资.如果他心情好,就可能把每位员工的工资加上一个相同的量.反之,如果心情不好,就可

[BZOJ 1503] [NOI2004] 郁闷的出纳员

1503: [NOI2004] 郁闷的出纳员 Time Limit: 5 SecMemory Limit: 64 MB Description OIER公司是一家大型专业化软件公司,有着数以万计的员工.作为一名出纳员,我的任务之一便是统计每位员工的工资.这本来是一份不错的工作,但是令人郁闷的是,我们的老板反复无常,经常调整员工的工资.如果他心情好,就可能把每位员工的工资加上一个相同的量.反之,如果心情不好,就可能把他们的工资扣除一个相同的量.我真不知道除了调工资他还做什么其它事情.工资的频繁调整

【NOI2004】【BZOJ1503】【重制版本(可过BZOJ+加速)】郁闷的出纳员

1503: [NOI2004]郁闷的出纳员 Time Limit: 5 Sec  Memory Limit: 64 MB Submit: 6524  Solved: 2277 [Submit][Status] Description OIER公司是一家大型专业化软件公司,有着数以万计的员工.作为一名出纳员,我的任务之一便是统计每位员工的工资.这本来是一份不错的工作,但是令人郁闷的是,我们的老板反复无常,经常调整员工的工资.如果他心情好,就可能把每位员工的工资加上一个相同的量.反之,如果心情不好,

BZOJ 题目1503: [NOI2004]郁闷的出纳员(SBT+延迟操作)

1503: [NOI2004]郁闷的出纳员 Time Limit: 5 Sec  Memory Limit: 64 MB Submit: 8058  Solved: 2828 [Submit][Status][Discuss] Description OIER公司是一家大型专业化软件公司,有着数以万计的员工.作为一名出纳员,我的任务之一便是统计每位员工的工资.这本来是一份不错的工作,但是令人郁闷的是,我们的老板反复无常,经常调整员工的工资.如果他心情好,就可能把每位员工的工资加上一个相同的量.反

【BZOJ】【1503】 【NOI2004】郁闷的出纳员

Splay Splay的模板题吧……妥妥的序列操作= =(好像有段时间没写过这种纯数据结构题了……) 1 /************************************************************** 2 Problem: 1503 3 User: Tunix 4 Language: C++ 5 Result: Accepted 6 Time:660 ms 7 Memory:3644 kb 8 ***********************************

bzoj 1503郁闷的出纳员(splay)

1503: [NOI2004]郁闷的出纳员 Time Limit: 5 Sec  Memory Limit: 64 MBSubmit: 11759  Solved: 4163[Submit][Status][Discuss] Description OIER公司是一家大型专业化软件公司,有着数以万计的员工.作为一名出纳员,我的任务之一便是统计每位员工的工资.这本来是一份不错的工作,但是令人郁闷的是,我们的老板反复无常,经常调整员工的工资.如果他心情好,就可能把每位员工的工资加上一个相同的量.反之

bzoj1503 [NOI2004]郁闷的出纳员(名次树+懒惰标记)

1503: [NOI2004]郁闷的出纳员 Time Limit: 5 Sec  Memory Limit: 64 MBSubmit: 8705  Solved: 3027[Submit][Status][Discuss] Description OIER 公司是一家大型专业化软件公司,有着数以万计的员工.作为一名出纳员,我的任务之一便是统计每位员工的工资.这本来是一份不错的工作,但是令人郁闷的是, 我们的老板反复无常,经常调整员工的工资.如果他心情好,就可能把每位员工的工资加上一个相同的量.反

NOI2004 郁闷的出纳员 Splay

郁闷的出纳员 [问题描述] OIER公司是一家大型专业化软件公司,有着数以万计的员工.作为一名出纳员,我的任务之一便是统计每位员工的工资.这本来是一份不错的工作,但是令人郁闷的是,我们的老板反复无常,经常调整员工的工资.如果他心情好,就可能把每位员工的工资加上一个相同的量.反之,如果心情不好,就可能把他们的工资扣除一个相同的量.我真不知道除了调工资他还做什么其它事情. 工资的频繁调整很让员工反感,尤其是集体扣除工资的时候,一旦某位员工发现自己的工资已经低于了合同规定的工资下界,他就会立刻气愤地离