Cod sursa(job #2286789)

Utilizator flibiaVisanu Cristian flibia Data 20 noiembrie 2018 19:14:19
Problema Lupul Urias si Rau Scor 16
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.86 kb
#include <bits/stdc++.h>
#define ll long long
#define fi first
#define se second

using namespace std;

ifstream in("lupu.in");
ofstream out("lupu.out");

int n;
ll x, l, ans, add, a, b;
multiset <pair <ll, ll> > h, hb, bad;

int main() {
	in >> n >> x >> l;
	for (int i = 1; i <= n; i++) {
		in >> a >> b;
		h.insert({a, b});
		hb.insert({b, a});
	}
	int p = n;
	for (int i = 1; i <= n; i++) {
		if (h.size() == 0)
			break;
		while (h.size()) {
			auto it = h.end();
			it--;
			auto v = *it;
			if (v.fi + add + l > x) {
				bad.insert({v.se, v.fi});
				h.erase(it);
				hb.erase(hb.find({v.se, v.fi}));
			} else break;
		}
		if (bad.size()) {
			auto it = bad.end();
			it--;
			ans += (*it).fi;
			bad.clear();
		} else {
			auto it = hb.end();
			it--;
			ans += (*it).fi;
			hb.erase(it);
			h.erase(h.find({(*it).se, (*it).fi}));
		}
		add += l;
	}
	out << ans;
	return 0;
}