Cod sursa(job #184641)

Utilizator swift90Ionut Bogdanescu swift90 Data 23 aprilie 2008 23:45:07
Problema Partitie Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.67 kb
#include<stdio.h>
#include<algorithm>
using namespace std;
int poz[300010];
pair<int,int> nr[300010];
int main(){
	freopen("partitie.in","r",stdin);
	freopen("partitie.out","w",stdout);
	int n,d,i,j,max=0;
	
	scanf("%d%d",&n,&d);
	for(i=0;i<n;++i){
		scanf("%d",&nr[i].first);
		nr[i].second=i;
	}
	sort(nr,nr+n);
	j=0;
	for(i=0;nr[i].first+d-1<=nr[n-1].first;++i){
		while(nr[j].first-nr[i].first<=d-1 && j<n)
			++j;
		if(j-i>max)
			max=j-i;
	}
	for(i=0;i<n;++i){
		for(j=0;j<max && i+j<n;++j)
			poz[nr[i+j].second]=j+1;
		i+=max-1;
	}
	
	printf("%d\n",max);
	for(i=0;i<n;++i)
		printf("%d\n",poz[i]);
	
	fclose(stdin);
	fclose(stdout);
	return 0;
}