黑盒子代表乙個原始的資料庫。
它可以用來儲存整數陣列,並且它擁有乙個特殊變數i。
在最開始,黑盒子是空的,並且i=0。
現在對黑盒子進行一系列的操作處理,操作包括以下兩種:
1、add(x):表示將x加入到黑盒子中。
2、get:使i增加1,輸出黑盒子中第i小的數值(即將所有數按公升序排序後的第i個數)。
下面給出乙個具體例子:
序號 操作 i 盒子內數(公升序排列後) 輸出的值
1 add(3) 0 3
2 get 1 3 3
3 add(1) 1 1, 3
4 get 2 1, 3 3
5 add(-4) 2 -4, 1, 3
6 add(2) 2 -4, 1, 2, 3
7 add(8) 2 -4, 1, 2, 3, 8
8 add(-1000) 2 -1000, -4, 1, 2, 3, 8
9 get 3 -1000, -4, 1, 2, 3, 8 1
10 get 4 -1000, -4, 1, 2, 3, 8 2
11 add(2) 4 -1000, -4, 1, 2, 2, 3, 8
為了方便描述,下面我們定義兩個序列:
1、a(1),a(2),…,a(m):這個序列由加入到黑盒子內的所有元素按加入順序排列後得到,上例中的a序列為(3,1,-4,2,8,-1000,2)。
2、u(1),u(2),…,u(n): 這個序列的第i項表示的是第i次get操作時,盒子內元素的數量。上例中的u序列為(1,2,6,6)。
現在請你根據給出的序列a和u求出操作過程中輸出的所有數值。
輸入格式
輸入包括三行。
第一行包含兩個整數m和n,表示a序列和u序列的長度。
第二行包含m個整數,表示a序列的每乙個元素。
第三行包含n個整數,表示u序列的每乙個元素。
同行每個數之間用空格隔開。
輸出格式
輸出操作過程中所有get操作輸出的數值。
每個數值佔一行。
資料範圍
|a(i)|<=2∗109,
1≤n≤m≤30000,
對於所有p(1≤p≤n), p≤u§≤m成立
輸入樣例:
7 43 1 -4 2 8 -1000 2
1 2 6 6
輸出樣例:33
12
#include
#include
#include
#include
using namespace std;
const
int n=
30010
;int n,m;
int a[n]
,b[n]
;int
main()
j++;//注意j指標要前移
}//迴圈結束之後,我們要輸出的第幾小的這個排序應該加1
//所以只需要將小頂堆的堆頂彈出至大頂堆,就可以滿足這個條件
down.
push
(up.
top())
; up.
pop();
cout
)<}return0;
}
關於黑盒子測試
等價劃分 將所有可能的輸入資料劃分為若干個子集,然後從每個子集選取有代表性的資料作為測試用例。等價類 某個輸入域的子集合,各個輸入資料對於揭露程式中的錯誤是等效的。有效等價類 對於程式規格說明是合理的,有意義的輸入資料構成的集合,利用他檢驗程式是否實現了預知的功能。無效等價類 對於程式規格是不合理的...
黑盒子 對頂堆
我們的大根堆中的所有數都必須小於小根堆中的數。而且還要注意,i每一次都是要增加1的,所以我們每次做完get操作後,都需要最小堆中的最小數彈出存入最大堆,也就是滿足第k小,因為k就是i,所以我們要這麼處理。倆個堆維護乙個有序序列,求第k個小的數 include include include incl...
《演算法競賽高階指南》 防曬
有c頭奶牛進行日光浴,第i頭奶牛需要minspf i 到maxspf i 單位強度之間的陽光。每頭奶牛在日光浴前必須塗防曬霜,防曬霜有l種,塗上第i種之後,身體接收到的陽光強度就會穩定為spf i 第i種防曬霜有cover i 瓶。求最多可以滿足多少頭奶牛進行日光浴。輸入格式 第一行輸入整數c和l。...