Pagini recente » Cod sursa (job #3241247) | Cod sursa (job #1768565) | Cod sursa (job #2875174) | Cod sursa (job #3131289) | Cod sursa (job #3177051)
#include <iostream>
#include <fstream>
#include <algorithm>
using namespace std;
ifstream f ("partitie.in");
ofstream g ("partitie.out");
const int NMAX = 300000;
int n, d, part[NMAX+1], nrp, j;
struct numar {
int val, poz;
};
numar v[NMAX+1];
bool cmp(numar a, numar b) {
return b.val > a.val;
}
int main()
{
f >> n >> d;
for (int i=1; i<=n; i++) {
f >> v[i].val;
v[i].poz = i;
}
sort(v+1, v+n+1, cmp);
for (int i=1; i<=n; i++) {
if(part[v[i].poz] == 0) {
nrp++;
part[v[i].poz]= nrp;
}
while (!(part[v[j].poz] == 0 && v[j].val - d >= v[i].val) && j <= n)
j++;
if (j <= n)
part[v[j].poz] = part[v[i].poz];
}
g << nrp << '\n';
for(int i=1; i<=n; i++)
g << part[i] << '\n';
return 0;
}