Cod sursa(job #518874)
#include <stdio.h>
long long K,i,x,M,N;
long long BS(long long L,long long R)
{
long long M=(L+R)/2;
if(L==R) return R;
if((long long)(M*(M-1)/2)<K) return BS(M+1,R);
else return BS(L,M);
}
int main()
{
freopen("farfurii.in","r",stdin);
freopen("farfurii.out","w",stdout);
scanf("%lld%lld",&N,&K);
M=BS(1,N);
if((long long)(M*(M-1)/2)==K)
{
for(i=1;i<=N-M;i++)
printf("%lld ",i);
for(i=0;i<M;i++)
printf("%lld ",N-i);
printf("\n");
}
else
{
x=(long long)(M*(M-1)/2)-K;
for(i=1;i<=N-M;i++)
printf("%lld ",i);
printf("%lld ",N-x);
for(i=0;i<M;i++)
if(i!=x) printf("%lld ",N-i);
printf("\n");
}
return 0;
}