Pagini recente » Borderou de evaluare (job #1691330) | Cod sursa (job #1945024) | Cod sursa (job #1945063) | Cod sursa (job #1381603) | Cod sursa (job #2516022)
#include <fstream>
#include <algorithm>
#include <set>
using namespace std;
const int nmax=300005;
pair<int,int> v[nmax];
int ans[nmax];
multiset<pair<int,int> >s;
int main()
{
ifstream cin("partitie.in");
ofstream cout("partitie.out");
int n,d;
cin>>n>>d;
for(int i=1; i<=n; i++)
{
cin>>v[i].first;
v[i].second=i;
}
sort(v+1,v+n+1);
s.insert(v[1]);
ans[v[1].second]=1;
int nr=1;
for(int i=2; i<=n; i++)
{
pair<int,int> x=*s.begin();
pair<int,int> y=*s.end();
if(y.first-v[i].first>=d)
{
s.erase(s.end());
s.insert(v[i]);
ans[v[i].second]=ans[y.second];
}
else if(v[i].first-x.first>=d)
{
s.erase(s.begin());
s.insert(v[i]);
ans[v[i].second]=ans[x.second];
}
else
{
ans[v[i].second]=++nr;
s.insert(v[i]);
}
}
cout<<s.size()<<"\n";
for(int i=1;i<=n;i++)
cout<<ans[i]<<"\n";
return 0;
}