支援刪除任意元素以及一些其他基本操作的堆

2022-02-28 13:39:00 字數 911 閱讀 3201

安利乙個黑科技,不知道是誰發明的(好像也有些年代了?)

其實這個黑科技的本質就是乙個大根堆,不同的是 它支援刪除堆內任意元素,同時也支援堆的基本操作

**如下:

struct heap

inline void erase(int x)

inline void pop()

inline int top()

inline int top2()

inline int size()

};

解釋一下兩個堆 \(q1\) 和 \(q2\) :

\(q1\) 儲存了當前所有元素(包括未刪除元素)

\(q2\) 儲存了 \(q1\) 中已刪除的元素

我們看到 push 操作,很平常,就是向 \(q1\) 中 \(push\) 乙個新的元素

這就是這個黑科技的精華了,我們向 \(q2\) 中 \(push\) 乙個元素表示在 \(q1\) 中它已經被刪除了

這裡就要用到 \(q2\) 裡面的元素了,如果堆頂的元素已經被 \(erase\) 過,那麼它此時應該在 \(q2\) 中的堆頂

此時我們把兩個堆一起 \(pop\) 就好了,直到堆頂元素不同或者 \(q2\) 沒元素了

這裡就是先進行和 \(pop\) 中類似的操作,刪除已經 \(erase\) 的元素,然後取出堆頂

有點騷,這個操作可以取出堆中的次大值,而 \(top3\) 、\(top4\) 以此類推(雖說不怎麼用到)

這個就是返回堆大小的,可以知道堆當前真實大小就是 \(q1\) 大小減去 \(q2\) 大小

新技能 \(get\) !

但是注意一下,這裡我們的 \(erase\) 操作必須合法, 否則會出現 \(bug\)

或者修改一下操作可能可以支援不合法操作...但我本人覺得不大可能...

C 指標的用法以及一些其他內容

include include include include using namespace std intmain double ptr score score double ptr score score 0 cout 指向陣列的指標 ptr score 2 t score t score 1...

div的布局以及一些元素的使用

div布局 1.css將頁面中的所有元素設定成了乙個盒子 2.將指定的盒子擺放到指定的位置 3.盒子的組成 內容區 content 由width,height決定 邊框 border 盒子的邊緣,為了命名規範,至少設定邊框的寬度 border width 顏色 border color 邊框的樣式 ...

求矩陣行列式以及其他一些東西

嘛。因為一道水題做不出來而被大佬鄙視的我決定讓計算機來做 我不信大佬還能夠有計算機快2333 稍微寫了點 實現了求行列式的功能。如果有時間的話說不定會把求逆也給碼了 咕咕咕 include includeusing namespace std void input double a,int n,in...