Pagini recente » Cod sursa (job #2667576) | Cod sursa (job #1489605) | Cod sursa (job #1709009) | Cod sursa (job #61383) | Cod sursa (job #3260031)
#include <fstream>
#include <set>
#include <algorithm>
using namespace std;
ifstream cin("partitie.in");
ofstream cout("partitie.out");
multiset<pair<int,int>>s;
int n,d,i;
pair<int,int>v[300001];
int ans[300001];
int nrgrup;
int main()
{
cin>>n>>d;
for(i=1; i<=n; i++)
{
int elem;
cin>>elem;
v[i].first = elem;
v[i].second = i;
}
sort(v+1,v+1+n);
for(i=1; i<=n; i++)
{
auto it = lower_bound(s.begin(),s.end(),make_pair(v[i].first-d,1));
if((it != s.end()||s.size() !=0)&&it->first + d != v[i].first)
{
if(it == s.begin())
it=s.end();
else
it--;
}
if(it == s.end())
{
nrgrup++;
ans[v[i].second] = nrgrup;
s.insert(make_pair(v[i].first,nrgrup));
}
else
{
int grup = it->second;
ans[v[i].second] = grup;
s.erase(it);
s.insert(make_pair(v[i].first,grup));
}
}
cout<<s.size()<<'\n';
for(i=1;i<=n;i++)
cout<<ans[i]<<'\n';
return 0;
}