Pagini recente » Cod sursa (job #608385) | Cod sursa (job #895471) | Cod sursa (job #1831704) | Cod sursa (job #2664423) | Cod sursa (job #733720)
Cod sursa(job #733720)
/*
#include <fstream>
using namespace std;
ifstream F("partitie.in");
ofstream G("partitie.out");
#define Beg first
#define End second
#define Dmax 300011
pair<int,int> A[Dmax];
int Ord[Dmax],Rez[Dmax];
int N,Co,D;
int main(void)
{
F>>N>>D;
for (int i=1;i<=N;++i)
{
F>>A[i].Beg;
A[i].End=i;
}
sort(A+1,A+N+1);
Co=1;
for (int i=1;i<=N;++i)
{
int j=i;
Ord[j]=Co;
while ( A[j+1].Beg - A[i].Beg < D && j<N )
Ord[++j]=Co;
i=j;
}
G<<Co<<'\n';
for (int i=1;i<=N;++i)
Rez[ A[i].End ]=Ord[ i ];
for (int i=1;i<=N;++i)
G<<Rez[i]<<'\n';
}
*/
#include <cstdio>
#include <algorithm>
using namespace std;
#define PII pair<int, int>
#define maxim(a, b) ((a > b) ? a : b)
#define f first
#define s second
#define NMax 300005
int N, D, bst, ord[NMax];
PII v[NMax];
int main(void)
{
int i, j;
freopen("partitie.in", "r", stdin);
freopen("partitie.out", "w", stdout);
scanf("%d %d", &N, &D);
for (i = 1; i <= N; i++)
{
scanf("%d", &v[i].f);
v[i].s = i;
}
sort(v+1, v+N+1);
for (i = 1, j = 1; i <= N; i++)
{
for (; j <= N && v[j].f-v[i].f < D; j++);
bst = maxim(bst, j-i);
}
for (i = 1, j = 0; i <= N; i++)
{
(j == bst) ? (j = 1) : (++j);
ord[v[i].s] = j;
}
printf("%d\n", bst);
for (i = 1; i <= N; i++)
printf("%d\n", ord[i]);
return 0;
}