Pagini recente » Cod sursa (job #985840) | Istoria paginii utilizator/pestisor_auriu | Cod sursa (job #168976) | Istoria paginii runda/greseli_destepte | Cod sursa (job #1012968)
#include <iostream>
#include <fstream>
#include <algorithm>
using namespace std;
ifstream f("partitie.in");
ofstream g("partitie.out");
struct vec
{int v,p;};
bool comp(vec x,vec y)
{return x.v<y.v;}
int n,sol[200005],last[400005],snum[400005],ord=0,st,dr,d;
vec a[200005];
int main()
{ int i;
f>>n>>d; //cout<<n;
for(i=1;i<=n;i++)
{f>>a[i].v; a[i].p=i;}
sort(a+1,a+n+1,comp);
st=1; dr=1; sol[a[1].p]=1;
last[1]=1; snum[1]=1; //sel[1]=1;
ord=1;
for(i=2;i<=n;i++)
if (a[i].v-last[st]>=d)
{ st++; dr++;
last[dr]=a[i].v;
snum[dr]=snum[st-1];
sol[a[i].p]=snum[dr];
}
else
{ dr++; ord++;
snum[dr]=ord;
last[dr]=a[i].v;
sol[a[i].p]=ord;
}
g<<ord<<"\n";
for(i=1;i<=n;i++)
g<<sol[i]<<"\n";
return 0;
}