http://poj.org/problem?id=1068
#include <stdio.h>
#include <string.h>
#include <iostream>
#include <algorithm>
using namespace std;
const int N = 50;
int a[N],b[N],ans[N],vis[N];
int main(){
// freopen("in.txt", "r", stdin);
int cas;
scanf("%d",&cas);
while(cas--){
int n;
scanf("%d",&n);
for(int i=1; i<=n; i++) scanf("%d",&a[i]);
int tmp = 0,cnt = 1;
for(int i=1; i<=n; i++){
if(a[i] > tmp){
for(int k=cnt; k<cnt+a[i]-tmp; k++) b[k] = 1;
b[cnt+a[i]-tmp] = 0;
cnt = cnt + a[i] -tmp + 1;
tmp = a[i];
}
else
b[cnt++] = 0;
}
if(cnt -1 < n * 2)
for(int k=cnt; k<=n; k++)
b[k] = 0;
memset(vis, 0, sizeof(vis));
int num = 1;
for(int i=1; i<=n*2; i++){
if(b[i]) continue;
int res = 0;
for(int j=i; j>=1; j--){
if(b[j]){
if(vis[j]) res++;
else{
ans[num++] = res + 1;
vis[j] = 1;
break;
}
}
}
}
for(int i=1; i<num; i++)
cout << ans[i] << ' ';
cout << endl;
}
}