c++有著豐富的函式以及各種容器,這極大的精簡的**。
在看火影第二部的時候,我們都知道,為了節省查克拉的使用,進而產生了一種容器,容器裡面裝有特定的技能,只要我們發射容器,就會產生和本身技能同樣的效果,這不僅節省了查克拉的使用,而且操作簡單,每個人都可以使用
c++set容器有著異曲同工之妙
set容器封裝了一種非常高效的平衡檢索二叉樹——紅黑樹,set中每個元素值都唯一,並且所有的元素都是以節點的方式來儲存。因此插入的時候只需要稍做變換,把節點的指標指向新的節點就可以了。刪除的時候類似,稍做變換後把指向刪除節點的指標指向其他節點也ok了。這裡的一切操作就是指標換來換去,和記憶體移動沒有關係。
vector封裝了陣列
list封裝了鍊錶
map和set一樣。
begin() ,返回set容器的第乙個元素
end() ,返回set容器的最後乙個元素
clear() ,刪除set容器中的所有的元素
empty() ,判斷set容器是否為空
max_size() ,返回set容器可能包含的元素最大個數
size() ,返回當前set容器中的元素個數
rbegin ,返回的值和end()相同
rend() ,返回的值和rbegin()相同
題目描述
現有一堆無聊的木頭,它們的長度已知且排成一行,突然有一天,第一塊木頭突發奇想,它想要知道在它的右邊比它長度次小的木頭是哪一塊,於是
它把這個想法告訴了其他木頭,而其他木頭對於它這個想法也十分好奇,但是木頭實在太多了,因此你需要告訴它們在它們右邊的哪一塊木頭的長度比它次小,也就是找到
比它次小的那塊木頭的位置。
輸入
第一行輸入乙個t(t <= 20),表示測試資料組數。
接下來t行,每行首先輸入乙個n(n <= 100000),表示木頭的個數,之後輸入n個正整數,分別表示木頭的長度(木頭長度<=1000000)
輸出
輸出n個滿足條件的答案,注意如果沒有滿足條件的答案你只需要輸出0就好了,如果對於某塊木頭有多個滿足條件的答案,你需要輸出答案盡量小的那乙個。
樣例輸入
16 10 9 26 10 10 18
樣例輸出
2 0 6 0 0 0
題目分析
1.次小——僅次於該高度的高度
2.題目要求在右邊尋求次小木頭,那我們就反向遍歷,依次將木頭的高度存入set容器中,也是因為在右邊尋找,那麼最右邊的木頭肯定為0,…這樣依次下去就簡單了許多
3.對於第i個木頭用lower_bound函式找到大於等於該木頭高度的木頭高度h,它的前乙個就是次小的木頭高度,h已經是第乙個,也就意味著沒有木頭比第i個木頭小
4.我們用id陣列儲存第i個木頭的位置
5.我們比較和返回的都是位址,但是在位址的前面加乙個*號就代表這個元素的值
ac**
#include
using
namespace std;
const
int maxn =
1e6+10;
int a[maxn]
, b[maxn]
, id[maxn]
;int
main()
for(
int i =
1; i <= n;
++i)
printf
("%d%c"
, b[i]
, i == n ?
'\n'
:' ');
}return0;
}
有詩和遠方的人,生活不會寂寞
初識紅黑樹
紅黑樹的五個基本特性 1.每個節點要麼是紅的,要麼就是黑的 2.根節點一定是黑的 3.每個葉子節點一定是黑的,就是 nil 4.如果乙個雙親節點是紅的,那麼他的子節點一定是黑的 5.對每個節點,從該節點到其子孫節點的所有路徑上包含相同數目的黑節點 紅黑樹的插入和刪除操作會違背紅黑樹的原有性質,為了避...
初識紅黑樹
查詢很簡單,跟二叉查詢樹是類似的,以上圖為例,查詢8的話,首先跟根節點13比較,8小於小於13,於是去左子樹中查詢,8又大於6而小於9於是去這個結點的中子樹中查詢,命中。插入是非常重要的一步,正是在插入上邊體現了2 3樹的自下向上生長,保持了樹的平衡。也因此,插入要複雜一點點,我們分情況討論 2 3...
底層實現紅黑樹 Set原始碼解析(紅黑樹)
之前粗略看了一下list和map,今咱來聊一下set。主要看以下幾個 1 hashset 2 collections.synchronizedset 3 linkedhashset 4 copyonwritearrayset 5 treeset 一 hashset hashset是日常搬磚中最常用的...