一道平衡樹實現的名次樹,用了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表示此時對整棵樹的改變值,這樣一來,在每次插入節點...