Pagini recente » Cod sursa (job #1445196) | Cod sursa (job #1798797) | Cod sursa (job #2348065) | Cod sursa (job #274690) | Cod sursa (job #3142037)
#include <iostream>
#include <fstream>
using namespace std;
ifstream fin("partitie.in");
ofstream fout("partitie.out");
struct vec
{
int el,poz;
}a[300001];
void quicksort(vec v[], int st, int dr)
{
if(st < dr)
{
//pivotul este inițial v[st]
int m = (st + dr) / 2;
vec aux = v[st];
v[st] = v[m];
v[m] = aux;
int i = st , j = dr, d = 0;
while(i < j)
{
if(v[i].el > v[j].el)
{
aux = v[i];
v[i] = v[j];
v[j] = aux;
d = 1 - d;
}
i += d;
j -= 1 - d;
}
quicksort(v, st , i - 1);
quicksort(v, i + 1 , dr);
}
}
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;
}
quicksort(a,1,n);
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;
}