Cod sursa(job #4692)

Utilizator judy_kCristina Petrovici judy_k Data 6 ianuarie 2007 12:18:50
Problema Farfurii Scor 80
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.82 kb
#include <stdio.h>

int n,i,j,l,k,m,a[100010],b[100010];

int caut(int l,int r,int n)
{
	int m;
 	while (l<=r)
    {
    	m=(l+r)/2;
        if (m*(m+1)/2==n) return m;
        else
        if (m*(m+1)/2<n && (m+1)*(m+2)/2>n) return(m+1);
        else
        if (m*(m+1)/2<n) l=m+1;
        else r=m-1;
    }
//    return m;
}


int main()
{
	freopen("farfurii.in","r",stdin);
    freopen("farfurii.out","w",stdout);
    scanf("%d %d",&n,&m);

    for (i=1;i<=n;++i) b[i]=0;
    k=caut(1,n+1,m);
    j=(k*(k+1))/2-m;
    l=n;
    for (i=k;i>0;--i)
    	if (i!=j)
        {
         	a[l]=n-i;
            l--;
        }
    a[l]=n;
    if (j>0)
    {
     	l--;
        a[l]=n-j;
    }

    for (i=1;i<l;++i) a[i]=i;

    for (i=1;i<=n;++i)
    	printf("%d ",a[i]);

    return 0;
}