BZOJ1503 NOI2004 鬱悶的出納員

2021-06-29 06:27:25 字數 1059 閱讀 5543

【分析】

一段裸的splay,支援upper_bound,lower_bound,然後和線段樹一樣lazy_tag一下(**寫得太醜qaq)。

注:如果加入的員工由於工資小於最低工資立刻離開了公司,此人不計入被炒員工總數(於是本題為我的ac率做出了巨大的貢獻)

也可以不lazy_tag,這題可以在外面開乙個tag記錄當前全體員工加了多少工資(tag<0就是減了多少工資)。乙個員工的工資就是他原來的工資加上tag,新加入的員工的「原來的工資」就是他的工資減tag。

【**】

#include using namespace std;

int n,min_salary,delete_num;

struct node

node(node *p)

void assign(int _v)

int child_size(int o)

void update()

int cmp(node *p)

void splay_node(node* &o)

o->update();

int d=o->cmp(&temp);

node *p=o->c[d];

if (p==null)

p->update();

int d2=p->cmp(&temp);

splay_node(p->c[d2]);

if (d==d2) rotate(o,d^1);else rotate(o->c[d],d2^1);

rotate(o,d^1); }

void splay_kth(node* &o)

rotate(o,d^1); }

void _delete()

public:

void delete()

}void insert(int _v)

void add_salary(int _v)

void salary_k(int _k)

}t;void work()

int main()

bzoj1503 NOI2004 鬱悶的出納員

本題依然是一道資料結構題,對本題而言,依然可以用splay來解。本題的乙個難點 對於我這個弱菜而言 是如何動態的改變平衡樹中的值。其實我們可以借鑑線段樹中的lazy tag的思想,因為若要變動則是整棵樹一起變,所以我們可以開設乙個全域性變數delta表示此時對整棵樹的改變值,這樣一來,在每次插入節點...

bzoj1503 NOI2004 鬱悶的出納員

oier公司是一家大型專業化軟體公司,有著數以萬計的員工。作為一名出納員,我的任務之一便是統計每位員工的工資。這本來是乙份不錯的工作,但是令人鬱悶的是,我們的老闆反覆無常,經常調整員工的工資。如果他心情好,就可能把每位員工的工資加上乙個相同的量。反之,如果心情不好,就可能把他們的工資扣除乙個相同的量...

BZOJ1503 NOI2004 鬱悶的出納員

題目鏈結 全部修改代價太大,就記錄每個員工工資變化量delta,新加入時當前員工的工資若 min,就加入新點,值為工資x delta。立刻離開的都不算入最後的答案,坑爸爸!include include include include include include include include ...