Cod sursa(job #1492657)

Utilizator CostanMiriamCostan Miriam CostanMiriam Data 27 septembrie 2015 22:49:43
Problema Partitie Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.92 kb
#include <fstream>
#include <algorithm>

#define DIM 300005

using namespace std;

ifstream fin("partitie.in");
ofstream fout("partitie.out");

int n, d;

struct data {

	int x;
	int y;


}v[DIM];

bool cmp(const data& a, const data &b){

	return a.x < b.x;

}

int sol[DIM];

int H[DIM];

int main() {

	fin >> n >> d;

	for (int i = 1; i <= n; i++) {

		fin >> v[i].x;

		v[i].y = i;

	}

	int k = 0;

	sort(v + 1, v + n + 1, cmp);

	sol[v[1].y] = ++k;

	H[1] = 1;

	int front = 1, back = 1;

	for (int i = 2; i <= n; i++) {

		int x = v[H[front]].x;
		int y = v[H[front]].y;

		if (v[i].x - x >= d){

			front++;
			sol[v[i].y] = sol[y];
			H[++back] = i;

		}
		else {

			sol[v[i].y] = ++k;
			H[++back] = i;

		}

	}

	fout << k << "\n";

	for (int i = 1; i <= n; i++)
		fout << sol[i] << "\n";

	return 0;

}

//Trust me, I'm the Doctor!
//Miriam e tare!