Cod sursa(job #125279)

Utilizator runnaway90Oprescu Radu Constantin runnaway90 Data 20 ianuarie 2008 12:23:29
Problema Partitie Scor 80
Compilator c Status done
Runda preONI 2008, Runda 3, Clasa a 9-a Marime 1.57 kb
#include<stdio.h>
long a[300002],b[300002],d,n,i,j,ko,ok,k,mul[300002];

void sort(long *p,long l,long r)
{long i,j,x,y;
     i=l;j=r;x=a[p[(l+r)/2]];
     do
     {
          while (a[p[i]]<x)i++;
          while (x<a[p[j]])j--;
          if (i<=j)
          {
                  y=p[i];p[i]=p[j];p[j]=y;
                  i++;j--;
          }                
     }while (i<=j);
     if (l<j) sort(p,l,j);
     if (i<r) sort(p,i,r);
}

int main()
{
     freopen("partitie.in","r",stdin);
     freopen("partitie.out","w",stdout);
     scanf("%ld %ld",&n,&d);
     for (i=1;i<=n;i++)
     {scanf("%ld",&a[i]);b[i]=i;}
     sort(b,1,n);
     j=0;
     for (i=1;i<=n;i++)
     {
          ko=1;
                     for(k=1;k<=j;k++)
                     {
                                   ok=1;
                                   if (a[b[i]]-mul[k]<d)
                                      ok=0;                                         
                                   if (ok)
                                   {
                                      mul[k]=a[b[i]];
                                      ko=0;
                                      a[b[i]]=k;
                                      break;
                                   }
                     }
                     if (ko)
                     {
			            j++;
                        mul[j]=a[b[i]];
                        a[b[i]]=j;
                     }
         
     }
     printf("%ld\n",j);
     for (i=1;i<=n;i++)
	 printf("%ld\n",a[i]);
     return 0;
}