堆疊是一種經典的後進先出的線性結構,相關的操作主要有「入棧」(在堆疊頂插入乙個元素)和「出棧」(將棧頂元素返回並從堆疊中刪除)。本題要求你實現另乙個附加的操作:「取中值」——即返回所有堆疊中元素鍵值的中值。給定 n 個元素,如果 n 是偶數,則中值定義為第 n/2 小元;若是奇數,則為第 (n+1)/2 小元。
輸入格式:
輸入的第一行是正整數 n(≤105)。隨後 n 行,每行給出一句指令,為以下 3 種之一:
push key
poppeekmedian
其中 key 是不超過 105 的正整數;push 表示「入棧」;pop 表示「出棧」;peekmedian 表示「取中值」。
輸出格式:
對每個 push 操作,將 key 插入堆疊,無需輸出;對每個 pop 或 peekmedian 操作,在一行中輸出相應的返回值。若操作非法,則對應輸出 invalid。
輸入樣例:
17輸出樣例:poppeekmedian
push 3
peekmedian
push 2
peekmedian
push 1
peekmedian
poppop
push 5
push 4
peekmedian
poppop
poppop
invalidinvalid32
2124
453invalid
我居然有勇氣挑戰l3的題。。。
這道題的難點在於取中值,我首先想的就是放到乙個vector陣列中,直接取,要求是第幾小元,顯然要排序,sort一把,**寫的很快,但在提交前,我就已經意識到肯定會超時。。(10^5的邊界),果然,後邊嘗試了其他方法,以失敗告終。乙個博主用的lower_bound函式(這個我用的不多,平時也想不起來),而且它直接找到了插入的位置,這直接就做到了有序,我不太了解底層的原始碼,所以就照著用它的方法在我的基礎上改了改(當然咱還是能看懂他是怎麼做的),提交25分,嗯?超時,換換scanf和printf,順便用用它說的很快的char陣列,30分,yeah,過了。撤銷,又提交了一遍25分的**,嗯?這次又過了,啊這,就很迷
參考鏈結
完全自己寫的,17分,其餘測試點(測試點1 2 3)超時
#include
#include
#include
using
namespace std;
intmain()
else
if(s==
"peekmedian")}
else
if(s==
"pop")}
else
}return0;
}
25分直接變30分,只因多提交了一次?
#include
#include
#include
using
namespace std;
intmain()
else
if(s[1]
=='e')}
else}}
return0;
}
參考其他博主**普通c++版
#include
#include
#include
using
namespace std;
intmain()
else
if(s[1]
=='e')}
else}}
return0;
}
參考演算法筆記,分治法
#include
#include
using
namespace std;
const
int maxn =
100010
;const
int sqrtn =
316;
// int(sqrt(100010)),表示塊內元素個數
int block[sqrtn]
;//記錄每一塊中存在的元素個數
int table[maxn]
;// hash陣列,記錄元素當前存在個數
stack<
int> st;
void
peekmedian
(int k)
int num = idx * sqrtn;
// idx號塊的第乙個數
while
(sum + table[num]
< k)
printf
("%d\n"
, num);}
void
push
(int x)
void
pop(
)int
main()
else
if(opt[1]
=='o'
)else
}else
else}}
return0;
}
L3 002 特殊堆疊 (30 分)
堆疊是一種經典的後進先出的線性結構,相關的操作主要有 入棧 在堆疊頂插入乙個元素 和 出棧 將棧頂元素返回並從堆疊中刪除 本題要求你實現另乙個附加的操作 取中值 即返回所有堆疊中元素鍵值的中值。給定 n 個元素,如果 n 是偶數,則中值定義為第 n 2 小元 若是奇數,則為第 n 1 2 小元。輸入...
L3 002 特殊堆疊 (30 分
堆疊是一種經典的後進先出的線性結構,相關的操作主要有 入棧 在堆疊頂插入乙個元素 和 出棧 將棧頂元素返回並從堆疊中刪除 本題要求你實現另乙個附加的操作 取中值 即返回所有堆疊中元素鍵值的中值。給定 n 個元素,如果 n 是偶數,則中值定義為第 n 2 小元 若是奇數,則為第 n 1 2 小元。輸入...
L3 002 特殊堆疊 (30 分
l3 002 特殊堆疊 30 分 堆疊是一種經典的後進先出的線性結構,相關的操作主要有 入棧 在堆疊頂插入乙個元素 和 出棧 將棧頂元素返回並從堆疊中刪除 本題要求你實現另乙個附加的操作 取中值 即返回所有堆疊中元素鍵值的中值。給定 n 個元素,如果 n 是偶數,則中值定義為第 n 2 小元 若是奇...