我们的黑盒代表一个原始数据库。它可以保存一个整数数组,并有一个特殊变量:i。
初始状态下,黑盒是空的、变量i为0。这个黑盒处理一系列命令(事务),有两种类型:
1)ADD(X):将元素X放入黑盒;
2)GET: 将i增加1,从黑盒的所有数据中给出第i小的数字、即“i-minimum”数;请注意,“i-minimum”数是黑盒元素按非降序排序之后的、i-th位置上的数字。
案例1
让我们检查11个命令的可能顺序:

(以上方框属于是一列)
需要制定一种处理给定命令序列的有效算法。ADD/GET命令的最大数量:每种类型30000个。
我们用两个整数数组来描述命令序列:
1:A(1)、A(2)、…A(m):包含在黑盒中的元素序列。A是绝对值不超过2000000000的整数,m<=30000。
例如,我们有一个A =(3,1,-4,2,8,-1000,2)。
2:u(1)、u(2)、…u(n):一个序列,设置了在第1个、第2个、……第N个GET命令出现时,包含进来多少黑盒数字元素。
例如,我们有u=(1,2,6,6)。
黑盒算法假定自然数序列u(1)、u(2)、…u(n)按非降序排序,n<=m 且 对每个p(1<=p<=n)、不等式p <= u(p) <= m是有效的。
它遵循如下事实:
对于u序列的p元素u(p),我们执行一个GET事务,给出A(1)、A(1)、…A(u(p))序列的第p个最小值。