Pagini recente » Monitorul de evaluare | Monitorul de evaluare | Cod sursa (job #2754564) | Cod sursa (job #1551101) | Cod sursa (job #726743)
Cod sursa(job #726743)
#include <fstream>
using namespace std;
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()
{
fstream f("partitie.in",ios::in);
fstream 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;
}