Cod sursa(job #1451708)

Utilizator EpictetStamatin Cristian Epictet Data 18 iunie 2015 10:09:55
Problema Lupul Urias si Rau Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.7 kb
#include <fstream>
#include <queue>
#include <algorithm>
using namespace std;
ifstream fin ( "lupu.in" );
ofstream fout ( "lupu.out" );
int N, X, L;
long long sol;
pair < int, int > V[100010];
priority_queue < int > H;

int main()
{
	fin >> N >> X >> L;
	for (int i = 1, d, c; i <= N; i++) {
		fin >> d >> c;
		V[i].first = ((X - d) / L) + 1; // De cate ori poate alege lupul !
		V[i].second = c;
	}
	
	sort ( V + 1, V + 1 + N );

	int i = N, aux = V[N].first;
	while (aux > 0)
	{
		while ( V[i].first == aux ) {
			H.push ( V[i--].second );
		}

		if ( H.empty() ) {
			aux = V[i].first;
		}
		else {
			sol += H.top();
			H.pop();
			aux --;
		}
	}
	
	fout << sol << '\n';
	fin.close();
	fout.close();
	return 0;
}