luogu1486 鬱悶的出納員

2022-04-10 05:56:51 字數 1398 閱讀 3624

題目鏈結

這個題其實就是對於treap中的刪除操作進行一些修改。自己yy了一種做法。就是在刪除的時候,如果要刪除的數比這棵子樹的根大,那麼就把根變成根的右孩子,這樣就相當於刪除了整棵左子樹和根節點。然後重新維護一下siz,並且維護一下平衡性就行了。

竟然把rotate函式寫錯了。調了30min。又沒正確理解

如果某個員工的初始工資低於最低工資標準,那麼將不計入最後的答案內

這句話的含義,又調了30min。23333

//每次修改操作之後都進行一次刪除,並且更改刪除函式

/** @author: wxyww

* @date: 2018-12-02 08:41:38

* @last modified time: 2018-12-02 10:02:49

*/#include#include#include#include#include#includeusing namespace std;

#define ls tr[cur].ch[0]

#define rs tr[cur].ch[1]

typedef long long ll;

const int n = 100000 + 100,inf = 1e9 + 7;

ll read()

while(c>='0'&&c<='9')

return x*f;

}struct node tr[n];

int min;

void up(int cur)

void rotate(int &cur,int f)

int tot;

void insert(int &cur,int val)

tr[cur].siz++;

if(val == tr[cur].val)

int d = val > tr[cur].val;

insert(tr[cur].ch[d],val);

if(tr[tr[cur].ch[d]].id < tr[cur].id) rotate(cur,d);

}void del(int &cur,int val)

up(cur);

if(tr[ls].id < tr[cur].id && ls) rotate(cur,0);

if(tr[rs].id < tr[cur].id && rs) rotate(cur,1);

}int kth(int cur,int now)

}int main()

if(c == 'a') min -= x,change += x;

if(c == 's')

if(c == 'f')

}cout《時間會把你欠下的對不起,變成還不起,又會把很多對不起,變成來不及。 ——乖,摸摸頭

洛谷 1486 鬱悶的出納員 Treap

題意概述 要求維護乙個序列支援以下操作 1,插入元素x 2,把序列的所有元素加上x 3,把序列的所有元素減去x,同時低於乙個給定的下限的元素馬上被刪除 4,詢問序列中第k大的元素。題解 treap 用乙個delta記錄元素的增減情況,即實際上的元素的值應該是qval root,x delta,那麼插...

鬱悶的出納員

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

P1486 NOI2004 鬱悶的出納員

題目鏈結 這道題需要動態插入,刪除,求排名,看到這就想到了平衡樹。由於本人只會splay,所以就用splay來做這道題,這道題插入和刪除都是模板,但是題中還有乙個比價坑的地方就是工資的調整。但我做不到在平衡樹上修改點權。如果每乙個都去插入和刪除的複雜度顯然非常高。看了題解發現,可以維護乙個變數來記錄...