BZOJ1503 NOI2004 鬱悶的出納員

2022-05-12 15:15:47 字數 1189 閱讀 8653

**\(splay\):

**\(fhq\)_\(treap\):

題目傳送門:

對於每個人都加工資,我們可以直接降低最低工資標準來判斷,對於減工資,我們就加標準,那麼每個人與最低標準的差值始終是正確的。

我們記乙個\(now\)表示當前最低工資標準,記乙個\(mn\)表示初始工資標準。那麼每次進來乙個工資為\(k\)的人,我們要使他與最低工資標準的差值是正確的,就應該使\(k\)加上\(now-mn\)。

而每個人與當前最低標準的差值加上初始標準,就是真實工資。

時間複雜度:\(o(nlogn)\)

空間複雜度:\(o(n)\)

#include #include using namespace std;

const int maxn=1e5+5;

char s[25];

int n,mn,now,tot;

int read()

struct splay

int find(int v)

if(val[u]val[u]]=tot;

splay(tot);

}void check()

struct fhq_treap

int getkth(int u,int v,bool &bo,int delta)

else ans=siz[son[u][0]]+cnt[u]+getkth(son[u][1],v,bo,delta);

if(bo)siz[u]+=delta;return ans;

}void update(int p)

pii split(int u,int rk)

else

}int merge(int a,int b)

void ins(int v)

void check()

int get_val(int k)

return val[u]+mn-now;

}}t;

int main()

if(s[1]=='a')now-=k;

if(s[1]=='s')

if(s[1]=='f')printf("%d\n",t.get_val(k));

}printf("%d\n",tot-t.siz[t.root]);

return 0;

}

bzoj1503 NOI2004 鬱悶的出納員

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

BZOJ1503 NOI2004 鬱悶的出納員

分析 一段裸的splay,支援upper bound,lower bound,然後和線段樹一樣lazy tag一下 寫得太醜qaq 注 如果加入的員工由於工資小於最低工資立刻離開了公司,此人不計入被炒員工總數 於是本題為我的ac率做出了巨大的貢獻 也可以不lazy tag,這題可以在外面開乙個tag...

bzoj1503 NOI2004 鬱悶的出納員

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