Pagini recente » Cod sursa (job #345549) | Cod sursa (job #2496904) | Cod sursa (job #2806200) | Cod sursa (job #367449) | Cod sursa (job #139808)
Cod sursa(job #139808)
#include<fstream>
typedef struct { int x,v; } ELEMENT;
ELEMENT a[300000];
int n,part[300000],d;
int pivot(int p,int 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(int p,int r)
{ int q;
if (p<r)
{ q=pivot(p,r);
qsort(p,q-1);
qsort(q+1,r);
}
}
int main()
{
int i,max,j,poz,c,r;
ifstream f("partitie.in");
f>>n>>d;
for (i=1;i<=n;i++)
{ f>>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
ofstream g("partitie.out");
g<<max<<endl;
for (i=1;i<=n;i++)
g<<part[i]<<endl;
g.close();
return 0;
}