Pagini recente » Cod sursa (job #1527422) | Cod sursa (job #2653544) | Cod sursa (job #181447) | Cod sursa (job #1352768) | Cod sursa (job #139814)
Cod sursa(job #139814)
#include<stdio.h>
typedef struct { long x,v; } ELEMENT;
ELEMENT a[300000];
long n,part[300000],d;
long pivot(long p,long r)
{ ELEMENT aux=a[p];
while (p<r)
{ while (aux.x<=a[r].x&&p<r) r--;
a[p]=a[r];
while (aux.x>=a[p].x&&p<r) p++;
a[r]=a[p];
}
a[p]=aux;
return p;
}
void qsort(long p,long r)
{ long q;
if (p<r)
{ q=pivot(p,r);
qsort(p,q-1);
qsort(q+1,r);
}
}
int main()
{
long i,max,j,poz,c,r;
FILE *f=fopen("partitie.in","r");
fscanf(f,"%ld%ld",&n,&d);
for (i=1;i<=n;i++)
{ fscanf(f,"%ld",&a[i].x); a[i].v=i; }
f.close();
//sortare
qsort(1,n);
//determin max
max=0;
for (i=1,j=2;j<=n&&i<=n-max;i++)
{ if (j<i) j=i+1;
while (a[j].x-a[i].x<d&&j<=n) j++;
j--;
if (j-i+1>max) max=j-i+1;
}
//repartizez
c=n/max;r=n%max;poz=1;
for (i=1;i<=c;i++)
for (j=1;j<=max;j++)
part[a[poz++].v]=j;
for (j=1;j<=r;j++)
part[a[poz++].v]=j;
//afisare
FILE *g=fopen("partitie.out","w");
fprintf(g,"%ld\n",max);
for (i=1;i<=n;i++)
fprintf(g,"%ld\n",part[i]);
fclose(g);
return 0;
}