Pagini recente » Cod sursa (job #1311728) | Cod sursa (job #2406372) | Profil EugenStoica | Cod sursa (job #2670066) | Cod sursa (job #2987566)
#include <iostream>
#include <fstream>
#include <cstring>
#include <algorithm>
using namespace std;
ifstream fin("partitie.in");
ofstream fout("partitie.out");
const int LMAX=300001;
int elem[LMAX],pozi[LMAX],sub[LMAX];
int main()
{
int n,D,i,j,aux,aux2,s,d,m,nrsub;
fin>>n>>D;
for (i=0;i<n;i++) {
fin>>elem[i];
pozi[i]=elem[i];
}
sort(elem,elem+n);
/*for (i=0;i<n-1;i++) {
aux=i;
for (j=i+1;j<n;j++) {
if (elem[aux]>elem[j]) {
aux=j;
}
}
aux2=elem[i];
elem[i]=elem[aux];
elem[aux]=aux2;
}
*/
nrsub=1;
for (i=0;i<n;i++) {
if (sub[i]==0) {
sub[i]=nrsub;
j=i;
while (j<n-1) {
s=-1;
d=n-1;
while (s+1!=d) {
m=(s+d)/2;
if (elem[m]<elem[j]+D) {
s=m;
}
else {
d=m;
}
}
while (d<n && sub[d]!=0) {
d++;
}
if (elem[d]>=elem[j]+D) {
sub[d]=nrsub;
}
j=d;
}
nrsub++;
}
}
fout<<nrsub-1<<endl;
for (i=0;i<n;i++) {
s=0;
d=n;
while (s+1!=d) {
m=(s+d)/2;
if (elem[m]>pozi[i]) {
d=m;
}
else {
s=m;
}
}
fout<<sub[s]<<endl;
}
fin.close();
fout.close();
return 0;
}