Pagini recente » Cod sursa (job #2933754) | Cod sursa (job #799250) | Cod sursa (job #308511) | Cod sursa (job #1764966) | Cod sursa (job #1623927)
#include <stdio.h>
#define MAXN 300000
int v[MAXN], point[MAXN], rez[MAXN];
void qs(int st, int dr){
int i = st, j = dr, piv = v[point[(st + dr) / 2]], aux;
while(i <= j){
while(v[point[i]] < piv)
i++;
while(v[point[j]] > piv)
j--;
if(i <= j){
aux = point[i]; point[i] = point[j]; point[j] = aux;
i++; j--;
}
}
if(st < j)
qs(st, j);
if(i < dr)
qs(i, dr);
}
int main(){
FILE *in = fopen("partitie.in", "r");
int n, d, i, nr = 0, st;
fscanf(in, "%d%d", &n, &d);
for(i = 0; i < n; i++){
fscanf(in, "%d", &v[i]);
point[i] = i;
}
fclose(in);
qs(0, n - 1);
st = 0;
for(i = 0; i < n; i++){
while(v[point[i]] - v[point[st]] >= d)
st++;
if(nr < i - st + 1)
nr = i - st + 1;
}
FILE *out = fopen("partitie.out", "w");
fprintf(out, "%d\n", nr);
for(i = 0; i < n; i++)
rez[point[i]] = i % nr;
for(i = 0; i < n; i++)
fprintf(out, "%d\n", rez[i] + 1);
fclose(out);
return 0;
}