Cod sursa(job #1492646)

Utilizator CostanMiriamCostan Miriam CostanMiriam Data 27 septembrie 2015 22:38:09
Problema Partitie Scor 90
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.16 kb
#include <fstream>
#include <algorithm>
#include <queue>

#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];

struct cmp1{

	bool operator()(const pair<int, int> &a, const pair<int, int> &b){

		return a.first > b.first;

	}

};

priority_queue < pair<int, int>, vector< pair<int, int> >, cmp1 > H;

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.push(make_pair(v[1].x, v[1].y));

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

		int x = H.top().first;
		int y = H.top().second;

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

			H.pop();
			sol[v[i].y] = sol[y];
			H.push(make_pair(v[i].x, v[i].y));

		}
		else {

			sol[v[i].y] = ++k;
			H.push(make_pair(v[i].x, v[i].y));

		}

	}

	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!