Pagini recente » Cod sursa (job #2942169) | Cod sursa (job #1222050) | Cod sursa (job #1630370) | Cod sursa (job #1565620) | Cod sursa (job #124946)
Cod sursa(job #124946)
//partitie
#include<stdio.h>
FILE*fin=fopen("partitie.in","r");
FILE*fout=fopen("partitie.out","w");
long n,d,si[100],subm[100],so[100],psi[100];
void rech(long nod,long dim)
{
long min=so[nod],nm=nod,ls=nod*2,rs=nod*2+1,aux;
if(ls<=dim&&so[ls]<min){min=so[ls];nm=ls;}
if(rs<=dim&&so[rs]<min){min=so[rs];nm=rs;}
if(nm!=nod)
{
aux=so[nod];so[nod]=so[nm];so[nm]=aux;
aux=psi[nod];psi[nod]=psi[nm];psi[nm]=aux;
rech(nm,dim);
}
}
int main()
{
long i,j,aux,r,stop,dr,dn;
fscanf(fin,"%ld" "%ld",&n,&d);
for(i=1;i<=n;i++)
{
fscanf(fin,"%ld",&si[i]);
so[i]=si[i];psi[i]=i;
}
fclose(fin);
//ordsir
for(i=n/2;i>=1;i--)
rech(i,n);
dn=n;
while(dn>0)
{
aux=so[1];so[1]=so[dn];so[dn]=aux;
aux=psi[1];psi[1]=psi[dn];psi[dn]=aux;
rech(1,dn-1);
dn--;
}
//rez
for(dr=2;dr<=n;dr++)
if(so[1]-so[dr]>=d) break;
r=dr;
for(i=1;i<dr-1;i++)
{
subm[psi[i]]=i;
subm[psi[r]]=i;
for(stop=r+1;stop<=n;stop++)
{
if(so[i+1]-so[stop]>=d) break;
subm[psi[stop]]=i;
}
r=stop;
}
subm[psi[dr-1]]=dr-1;
for(i=r;i<=n;i++)
subm[psi[i]]=dr-1;
fprintf(fout,"%ld" "%c",dr-1,'\n');
for(i=1;i<=n;i++)
fprintf(fout,"%ld" "%c",subm[i],'\n');
fclose(fout);
return 0;
}