http://poj.org/problem?id=1068
#include<cstdio> #include <cstring> using namespace std; int ind[45]; bool used[45]; int r[21]; int l[21]; int len,n,llen; int w[21]; int main(){ int t; scanf("%d",&t); while(t--){ memset(used,0,sizeof(used)); len=0,llen=0; scanf("%d",&n); for(int i=0;i<n;i++){ scanf("%d",r+i); for(int j=0;j<r[i]-(i>0?r[i-1]:0);j++){ ind[len++]=llen; l[llen++]=i; } ind[len++]=i; } for(int i=0;i<n;i++){ int tind=r[i]+i; used[tind]=true; for(int j=tind-1;j>=0;j--){ if(!used[j]){ w[i]=i-l[ind[j]]+1; used[j]=true; break; } } } for(int i=0;i<n;i++)printf("%d%c",w[i],i==n-1?' ':' '); } return 0; }