Pagini recente » Cod sursa (job #560303) | Cod sursa (job #1537605) | Cod sursa (job #1303823) | Cod sursa (job #2615710) | Cod sursa (job #3142035)
#include <iostream>
#include <fstream>
using namespace std;
ifstream fin("partitie.in");
ofstream fout("partitie.out");
struct vec
{
int el,poz;
}a[300001];
int nr=0;
int n,d;
int sol[300001];
int main()
{
fin>>n>>d;
for(int i=1; i<=n; i++)
{
fin>>a[i].el;
a[i].poz=i;
}
bool sorted;
do
{
sorted = true;
for (int k = 1; k < n; k++)
if (a[k].el > a[k + 1].el)
{
vec aux = a[k];
a[k] = a[k + 1];
a[k + 1] = aux;
sorted = false;
}
}
while (!sorted);
int j=2;
for(int i=1; i<=n; i++)
{
if(sol[a[i].poz]==0)
{
sol[a[i].poz]=++nr;
}
while(j<=n && (sol[a[j].poz]||a[j].el<a[i].el+d))
{
j++;
}
if(j<=n)
{
sol[a[j].poz]=sol[a[i].poz];
}
/*for(int j=i+1; j<=n; j++)
{
if(a[i]+d<=a[j] && sol[j]==0)
{
cout<<a[i]<<" "<<a[j]<<endl;
sol[j]=sol[i];
break;
}
}*/
}
fout<<nr<<'\n';
for(int i=1; i<=n; i++)
{
fout<<sol[i]<<'\n';
}
return 0;
}