Pagini recente » Cod sursa (job #2331263) | Cod sursa (job #171551) | Cod sursa (job #48845) | Cod sursa (job #416729) | Cod sursa (job #257580)
Cod sursa(job #257580)
#include<stdio.h>
#define max(a,b) (a>b?a:b)
FILE *fin=fopen("partitie.in","r"),
*fout=fopen("partitie.out","w");
int N,K,A[300005],B[300005],C[300005];
void swap(int i,int j){
A[i]^=A[j];A[j]^=A[i];A[i]^=A[j];
B[i]^=B[j];B[j]^=B[i];B[i]^=B[j];
}
int main(){
fscanf(fin,"%d %d",&N,&K);
for(int i=1;i<=N;i++){
fscanf(fin,"%d",&A[i]);
B[i]=i;
int j=i;
while(j/2 && A[j/2]<A[j]){
swap(j,j/2);
j/=2;
}
}
int Nh=N;
while(Nh>1){
swap(1,Nh);
--Nh;
int i=1,j;
while(1){
j=2*i;
if(j>Nh) break;
if(j+1<=Nh && A[j]<A[j+1]) ++j;
if(A[j]<=A[i]) break;
swap(i,j);
i=j;
}
}
int MAX=-1,j;
for(int i=1;i<=N;i=j){
for(j=i;j<=N && A[j]-A[i]<=K-1;j++);
MAX=max(MAX,j-i);
}
fprintf(fout,"%d\n",MAX);
int c=1;
for(int i=1;i<=N;i++){
if(c>MAX)
c=1;
C[B[i]]=c++;
}
for(int i=1;i<=N;i++)
fprintf(fout,"%d\n",C[i]);
fclose(fin);
fclose(fout);
return 0;
}