注意要输出的数据是h,h代表有h篇论文至少引用了h次。
#include <iostream>
#include <queue>
using namespace std;
int main()
{
int T;
scanf("%d", &T);
for (int cases = 1; cases <= T; cases ++ )
{
printf("Case #%d: ", cases);
priority_queue<int, vector<int>, greater<int>> heap; //建小根堆
int n;
scanf("%d", &n);
int h = 0;
while (n -- )
{
int x;
scanf("%d", &x);
if (x > h) heap.push(x);
//堆内等于h的也要剔除,不然下一步h没法自增
while (heap.size() && heap.top() <= h) heap.pop();
//表示有h篇论文至少引用了h次,h最多每次只能加1
if (heap.size() > h) h ++ ;
printf("%d ", h);
}
puts("");
}
return 0;
}