Pagini recente » Cod sursa (job #180854) | Cod sursa (job #1784574) | Cod sursa (job #2275462) | Cod sursa (job #2608314) | Cod sursa (job #124984)
Cod sursa(job #124984)
#include <cstdio>
#include <queue>
#include <algorithm>
using namespace std;
#define MAXN 300005
int N, K;
int x[MAXN], o[MAXN];
inline int cmp( int a, int b )
{
return x[a] < x[b];
}
queue<int> Q;
int cur[MAXN], rez[MAXN];
char tmp[16];
int main()
{
freopen("partitie.in", "rt", stdin);
freopen("partitie.out", "wt", stdout);
scanf("%d %d ", &N, &K);
for (int i = 0; i < N; i++)
{
fgets( tmp, 16, stdin );
char *p = tmp;
for (x[i] = 0; '0' <= *p && *p <= '9'; p++)
x[i] = x[i] * 10 + *p - '0';
o[i] = i;
}
sort( o, o + N, cmp );
int NR = 0;
for (int k = 0; k < N; k++)
{
int i = o[k];
if (Q.empty() || (cur[ Q.front() ] > x[i] - K))
NR++, cur[NR] = x[i],
Q.push(NR),
rez[i] = NR;
else
{
int set = Q.front();
Q.pop();
cur[set] = x[i];
Q.push(set);
rez[i] = set;
}
}
printf("%d\n", NR);
for (int i = 0; i < N; i++)
printf("%d\n", rez[i]);
return 0;
}