大家都知道「堆疊」是一種「先進後出」的線性結構,基本操作有「入棧」(將新元素插入棧頂)和「出棧」(將棧頂元素的值返回並從堆疊中將其刪除)。現請你實現一種特殊的堆疊,它多了一種操作叫「查中值」,即返回堆疊中所有元素的中值。對於n個元素,若n是偶數,則中值定義為第n/2個最小元;若n是奇數,則中值定義為第(n+1)/2個最小元。
輸入格式:
輸入第一行給出正整數n(<= 105
)。隨後n行,每行給出乙個操作指令,為下列3種指令之一:
push
keypop
peekmedian
其中push表示入棧,key是不超過105
的正整數;pop表示出棧;peekmedian表示查中值。
輸出格式:
對每個入棧指令,將key入棧,並不輸出任何資訊。對每個出棧或查中值的指令,在一行中列印相應的返回結果。若指令非法,就列印「invalid」。
輸入樣例:
17輸出樣例:poppeekmedian
push 3
peekmedian
push 2
peekmedian
push 1
peekmedian
poppop
push 5
push 4
peekmedian
poppop
poppop
invalidinvalid32
2124
453invalid
#include#include#include#include#include#includeusing namespace std;
queueq;
stacks;
int n,node[100005*4],p;
void update(int l,int r,int n,int p,int flag)
int mid=l+(r-l)/2;
if(p<=mid)
update(l,mid,2*n,p,flag);
else
update(mid+1,r,2*n+1,p,flag);
node[n]=node[n*2]+node[n*2+1];
}void find(int l,int r,int n,int p)
int m=l+(r-l)/2;
if(node[n*2]>=p)
find(l,m,2*n,p);
else
find(m+1,r,n*2+1,p-node[n*2]);
}int main()
}else if(str[1]=='u')
else if(str[1]=='e')
else
printf("invalid\n");}}
return 0;
}
L3 002 特殊堆疊
堆疊是一種經典的後進先出的線性結構,相關的操作主要有 入棧 在堆疊頂插入乙個元素 和 出棧 將棧頂元素返回並從堆疊中刪除 本題要求你實現另乙個附加的操作 取中值 即返回所有堆疊中元素鍵值的中值。給定 n 個元素,如果 n 是偶數,則中值定義為第 n 2 小元 若是奇數,則為第 n 1 2 小元。輸入...
L3 002 堆疊 樹狀陣列 二分
時間限制 200 ms 記憶體限制 65536 kb 長度限制 8000 b 判題程式 standard 作者 陳越 大家都知道 堆疊 是一種 先進後出 的線性結構,基本操作有 入棧 將新元素插入棧頂 和 出棧 將棧頂元素的值返回並從堆疊中將其刪除 現請你實現一種特殊的堆疊,它多了一種操作叫 查中值...
L3 002 特殊堆疊 (雙陣列模擬棧)
堆疊是一種經典的後進先出的線性結構,相關的操作主要有 入棧 在堆疊頂插入乙個元素 和 出棧 將棧頂元素返回並從堆疊中刪除 本題要求你實現另乙個附加的操作 取中值 即返回所有堆疊中元素鍵值的中值。給定 n 個元素,如果 n 是偶數,則中值定義為第 frac2 小元 若是奇數,則為第 frac2 小元。...