vijosp1507鬱悶的出納員

2022-09-18 10:42:39 字數 971 閱讀 1666

一道平衡樹實現的名次樹,用了treap實現。

1.rand()產生的數可能比inf大,很可能改變樹的結構。

2.刪除時先遞迴,然後再刪除自己,實現就變得簡單多了。

3.因為很多情況樹會是空的,所以設了乙個root虛擬節點。設指標時一定要new乙個出來。

就這樣,其實水題一道。

#include#include

#include

using

namespace

std;

const

int maxn = 100000 + 10

;const

int inf = 1000000000 + 7

;int n,minv,p = 0,ans = 0

,sum;

struct

node

void

maintain()

} a[maxn];

node *root = new

node();

void rotate(node* &o,int

d) void insert(node* &o,int

x)

else

}void remove(node* &o,int

x)

else

else

}}int find(node* o,int

k)

else

}char s[10

];int

main() ;

if(s[0] == '

a') sum +=v;

if(s[0] == 's'

)

if(s[0] == 'f'

) }

printf(

"%d\n

",ans);

return0;

}

鬱悶的出納員

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

鬱悶的出納員 題解(Splay)

題面 用delta記錄對工資的加減,那麼新增節點時點權應 delta,輸出時 delta 幾種操作中減少工資較麻煩 1.delta val 2.刪點 求前驅轉到根,刪除左子樹 這裡的刪除不用乙個乙個暴力刪,直接斷掉子樹關係即可 至於求k大 我比較懶直接改成求size k 1小 逃 include i...

bzoj1503 NOI2004 鬱悶的出納員

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