Cod sursa(job #726724)

Utilizator teo.serbanescuTeo Serbanescu teo.serbanescu Data 27 martie 2012 14:26:08
Problema Partitie Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.96 kb
#include <iostream.h>
#include <fstream.h>

long a[300000],poz[300000],x[300000],i,j,n,max,nr,nr1,d;

void quickSort(int st, int dr) {
      int i = st, j = dr;

      int aux;

      int m = a[(st+dr) / 2];

      while (i <= j) {

            while (a[i] < m)

                  i++;

            while (a[j] > m)

                  j--;

            if (i <= j) {

                  aux = a[i];

                  a[i] = a[j];

                  a[j] = aux;
				  
				  aux=poz[i];
				  poz[i]=poz[j];
				  poz[j]=aux;
                  i++;

                  j--;

            }

	  }
      if (st < j)

            quickSort(st, j);

      if (i < dr)

            quickSort(i, dr);

}

void quickSort1(int st, int dr) {
      int i = st, j = dr;

      int aux;

      int m = poz[(st+dr) / 2];

      while (i <= j) {

            while (poz[i] < m)

                  i++;

            while (poz[j] > m)

                  j--;

            if (i <= j) {

                  aux = x[i];

                  x[i] = x[j];

                  x[j] = aux;
				  
				  aux=poz[i];
				  poz[i]=poz[j];
				  poz[j]=aux;
                  i++;

                  j--;

            }

	  }
      if (st < j)

            quickSort1(st, j);

      if (i < dr)

            quickSort1(i, dr);

}

int main()
{
	ifstream f("partitie.in",ios::in);
	ofstream g("partitie.out",ios::out);
	f>>n>>d;
	for (i=1;i<=n;i++) {
						f>>a[i];
						poz[i]=i;
	}
	quickSort(1,n);
	nr=d-1;
	max=0;
	for (i=1;i<=n;i++)
	{
		nr1=1;
		if (x[i]==0) {
						x[i]=nr1;
						nr1++;
		}
		j=i+1;
		while ((j<=n)&&(a[j]-a[i]<=nr)) 
		{
			if (x[j]==0) x[j]=nr1;
			nr1++;
			j++;
		}
		/*if (nr1==max) {
						nrc++;
		}*/
		if (nr1>max) {
						max=nr1;
						/*nrc=1;*/
						}
	}
	quickSort1(1,n);
	g<<max<<endl;
	for (i=1;i<=n;i++) g<<x[i]<<endl;
	f.close();
	g.close();
	return 0;
}