NOI2004 鬱悶的出納員

2022-06-03 04:57:16 字數 1173 閱讀 8251

由於每次調工資都是對全體員工,所以可以用乙個標記來記錄全體員工的工資偏移值。

每次下調工資都有可能造成有員工的工資低於下界,這時需要將他們一起移除。可以用splay來維護員工工資的集合。

#include using

namespace

std;

namespace

splay

;const

int inf = 0x7fffffff

;struct node *nil = 0

;struct

node

int cmp(int

v)

int cmpkth(int

k)

void pullup()

} *root;

void

init()

void rotate(node *&t, int

d)void splay(node *&t, int

v)

else

}else

rotate(t, d ^ 1

); }

}void splaykth(node *&t, int

k)

else

}else

rotate(t, d ^ 1

); }

}node *split(node *&t, int v) //

t為大於等於v的樹,返回嚴格小於v的樹

else

t->pullup();

t =t1;

return

t2;}

node *join(node *t, node *t2)

void insert(node *&t, int

v)

else

k = join(k, new

node(v));

t =join(k, t);

}void remove(node *&t)}}

int n, minn, inc = 0, cnt = 0

;int

main()

break

; }

}cout

<< cnt

}

noi 2004 鬱悶的出納員

原題位址 花了一兩天真正的熟悉了treap,對於乙個東西,本蒟蒻認為,不應該要會,還應會熟練的寫,像哈狗寫這個只需十分鐘 好吧,話歸正題 先推薦另類解法 戳進去 此題解法很多bit 權值線段樹 各種平衡樹 準備抽空寫 是一道很棒的模板題。這道題我們把每次全體加的工資和減的弄到乙個變數,姑且叫為w,把...

NOI2004 鬱悶的出納員

大致題意就是對初始為空的數列的各種操作233 題解 splay啦 其中可能會遇到的幾個問題 1.如何刪去低於min的點 找到數列中min的後繼提為根,把根的左孩子丟 shan 了就完成了 很容易yy到的對吧 2.如何處理對當前數列中的數進行 k 開個全域性變數存整體的波動 值ff。那麼刪點的時候就把...

NOI2004 鬱悶的出納員

點此看題 這道題很新的一點就是加工資和減工資,這貌似要用到區間修改。但是細細想想,操作的物件是全樹,我們可以維護乙個累積的修改值,新加入乙個點的話要刪去之前的累計的修改值,對於減工資的情況,判斷有沒有低於最低的限制。注意如果乙個一來人就低於最低線,那麼這個人不被統計在最後的刪除人數中。include...