L3 002 特殊堆疊 30 分

2021-09-28 18:08:49 字數 2416 閱讀 8858

堆疊是一種經典的後進先出的線性結構,相關的操作主要有「入棧」(在堆疊頂插入乙個元素)和「出棧」(將棧頂元素返回並從堆疊中刪除)。本題要求你實現另乙個附加的操作:「取中值」——即返回所有堆疊中元素鍵值的中值。給定 n 個元素,如果 n 是偶數,則中值定義為第 n/2 小元;若是奇數,則為第 (n+1)/2 小元。

輸入格式:

輸入的第一行是正整數 n(≤10

​5​​ )。隨後 n 行,每行給出一句指令,為以下 3 種之一:

push key

poppeekmedian

其中 key 是不超過 10

​5​​ 的正整數;push 表示「入棧」;pop 表示「出棧」;peekmedian 表示「取中值」。

輸出格式:

對每個 push 操作,將 key 插入堆疊,無需輸出;對每個 pop 或 peekmedian 操作,在一行中輸出相應的返回值。若操作非法,則對應輸出 invalid。

輸入樣例:

17pop

peekmedian

push 3

peekmedian

push 2

peekmedian

push 1

peekmedian

poppop

push 5

push 4

peekmedian

poppop

poppop

輸出樣例:

invalid

invalid32

2124

453invalid

注意點:題目就是難在找「已排序的序列」的「中間元素」,而我們又是在「過程中」進行元素的操作,一般就想找一次「中間元素」就排序一次,然後結果是肯定的–超時。。。

1,超時2,3測試點:用數組裝元素個數,開得足夠大,保證元素不使陣列越界–numbermap,好處就是,相當於直接排序了的,只需要判斷這個數是所有數的第幾個,而numbermap的值就是它的下標(該元素)個數,然後從頭到尾遍歷一遍,就可以找到「中間元素」了。

#include

#include

#include

#define max 100002

#define foreach(a,b,c) for((a)=(b); (a)<(c); (a)++)

using

namespace std;

intgetnumber

(char

*str,

int length)

;struct stack

;int numbermap[max]=;

intmain()

t++;}

switch

(command[1]

)else

break

;case

'e':

if(stack-

>size !=0)

}}}else

break;}

}return0;

}int

getnumber

(char

*str,

int length)

return result;

}

2,通過:使用low_bound,返回第乙個大於等於值value的位置

#include

#include

#include

#define foreach(a,b,c) for((a)=(b); (a)<(c); (a)++)

using

namespace std;

intgetnumber

(char

*str,

int length)

;struct stack

;int n,i,t,temp;

char command[

100]

;vector<

int> arr;

vector<

int>

::iterator it;

stack *stack =

new stack;

intmain()

t++;}

switch

(command[1]

)else

break

;case

'e':

if(stack-

>size !=0)

else

break;}

}return0;

}int

getnumber

(char

*str,

int length)

return result;

}

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 小元 若是奇...