Pagini recente » Cod sursa (job #2095681) | Cod sursa (job #431598) | Cod sursa (job #2103717) | Cod sursa (job #1318652) | Cod sursa (job #3237285)
#include <fstream>
#include <algorithm>
using namespace std;
ifstream fin("partitie.in");
ofstream fout("partitie.out");
struct nr
{
int x,y;
};
nr v[300001];
int a[300001],sol[300001],nr0,nr1,m,d,i;
bool op1(nr a,nr b)
{
return a.x<b.x;
}
int main()
{
fin>>m>>d;
for(i=1;i<=m;i++)
{
fin>>v[i].x;
v[i].y=i;
}
sort(v+1,v+m+1,op1);
nr0=1;
nr1=0;
for(i=1;i<=m;i++)
{
while(nr0<m && (a[nr0]!=0 ||v[nr0].x-v[i].y<d))
{
nr0++;
}
if(a[i]==0)
{
nr1++;
a[i]=nr1;
}
if(a[nr0]==0&&v[nr0].x-v[i].x>=d)
{
a[nr0]=a[i];
}
}
for(i=1; i<=m; i++)
{
sol[v[i].y]=a[i];
}
fout<<nr1<<'\n';
for(i=1;i<=m;i++)
{
fout<<sol[i]<<'\n';
}
return 0;
}