NOI2004 鬱悶的出納員Splay版

2022-08-15 07:42:11 字數 1260 閱讀 5257

題目連線codevs1286

bzoj1503,這裡資料似乎強大一點,slowsplay會tle

學了splay,,,練練手

多維護乙個size域,就可以求k大值辣

昨晚調到接近3點還是rte/wa,,cry

今天把每個節點加個cnt域就過了

(出現重複的數字的情況

#include

#include

using namespace std;

int m,d,ans;

struct node;

class splaytree

int s(node *t)

void zag(node *x)

y->f=x;

x->l=y;

y->s=s(y->l)+s(y->r)+y->cnt;

x->s=s(x->l)+s(x->r)+x->cnt;

}void zig(node *x)

y->f=x;

x->r=y;

y->s=s(y->l)+s(y->r)+y->cnt;

x->s=s(x->l)+s(x->r)+x->cnt;

}void splay(node *x)else

if (x==p->l)

else

}else

else }}

rt=x;

}void insert(int x)

else

if (xkey)t=t->l;

else

}t=(node*)malloc(sizeof(node));

t->key=x;

t->l=t->r=

null;

t->f=fa;

t->s=t->cnt=

1; if (fa)

splay(t);

}int findkth(node *t,int k)

}void goaway(node *&t,node *fa)

else

if (t)t->s=t->cnt+s(t->l)+s(t->r);

}void work(char ch,int x)

if (ch==

'f')

}private:

node *rt;//root

};int main()

printf("%d\n",ans);

return

0;}

noi 2004 鬱悶的出納員

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

NOI2004 鬱悶的出納員

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

NOI2004 鬱悶的出納員

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