Pagini recente » Borderou de evaluare (job #528099) | Cod sursa (job #2357701) | Cod sursa (job #629113) | Cod sursa (job #871886) | Cod sursa (job #2924073)
#include <fstream>
#include <algorithm>
using namespace std;
const int dim=3e5+5;
int n,d,luat[dim],nr;
struct idk{
int val,poz;
}a[dim];
bool cmp(idk x, idk y){
return x.val<y.val;
}
int main(){
ifstream f("partitie.in");
ofstream g("partitie.out");
f>>n>>d;
for(int i=1;i<=n;i++)
f>>a[i].val,a[i].poz=i;
sort(a+1,a+n+1,cmp);
int j=2;
for(int i=1;i<=n;i++){
if(luat[a[i].poz]==0)
luat[a[i].poz]=++nr;
while(j<=n and a[j].val-a[i].val<d)
j++;
luat[a[j++].poz]=luat[a[i].poz];
}
g<<nr<<endl;
for(int i=1;i<=n;i++)
g<<luat[i]<<endl;
return 0;
}