Pagini recente » Borderou de evaluare (job #444438) | Borderou de evaluare (job #2043242) | Cod sursa (job #609695) | Borderou de evaluare (job #581287) | Cod sursa (job #2501160)
#include <bits/stdc++.h>
using namespace std;
pair <int,int> elem[300005];
vector <pair <int, int> > submult[300005];
int final[300005];
int main()
{
ifstream cin ("partitie.in");
ofstream cout ("partitie.out");
int n,d;
cin>>n>>d;
for(int i=1; i<=n; i++)
{
cin>>elem[i].first;
elem[i].second=i;
}
sort(elem+1,elem+n+1);
int sm=1;
submult[sm].push_back(elem[1]);
for(int i=2; i<=n; i++)
{
int ok=0;
int cand=1;
while(cand<=sm)
{
if(elem[i].first-submult[cand][submult[cand].size()-1].first>=d)
{
ok=1;
submult[cand].push_back(elem[i]);
break;
}
cand++;
}
if(ok==0)
{
sm++;
submult[sm].push_back(elem[i]);
}
}
for(int i=1; i<=sm; i++)
{
for(int j=0; j<submult[i].size(); j++)
final[submult[i][j].second]=i;
}
cout<<sm<<"\n";
for(int i=1; i<=n; i++)
cout<<final[i]<<"\n";
return 0;
}