Cod sursa(job #520977)
#include <stdio.h>
const long long maxn=100010;
long long i,j,k,p,N,K,F[maxn],F2[maxn];
bool ok=false;
int main()
{
freopen("farfurii.in","r",stdin);
freopen("farfurii.out","w",stdout);
scanf("%d %d",&N,&K);
i=1;
if(K==0) K=-100;
do
{
p=(N-i)*(N-i-1)/2;
if(p>K) F[i]=i,i++;
else if(p<K)
{
F[N+K-(N-i+1)*(N-i)/2]=i;
K=p;
}
else
for(j=N,p=i,ok=true;j>=1;j--)
{
while(F[j]>0 && j>=1) j--;
F[j]=++p;
}
}
while(!ok && i<=N);
for(i=1;i<=N;i++)
F2[F[i]]=i;
for(i=1;i<=N;i++)
printf("%d ",F2[i]);
}