Pagini recente » Cod sursa (job #2227558) | Cod sursa (job #269360) | Monitorul de evaluare | Cod sursa (job #836703) | Cod sursa (job #2286875)
#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, vf;
ll x, l, ans, add, a, b;
pair <ll, ll> st[100100];
set <pair <ll, ll> > h;
int main() {
in >> n >> x >> l;
for (int i = 1; i <= n; i++) {
in >> a >> b;
ll can = (x - a) / l;
if (can >= 0)
st[++vf] = {-b, can};
}
sort(st + 1, st + vf + 1);
h.insert({0, INT_MAX});
for (int i = 1; i <= vf; i++) {
ll v = st[i].se;
if ((*h.begin()).fi > v)
continue;
auto it = h.upper_bound({v, INT_MAX});
it--;
auto seg = *it;
h.erase(it);
ans -= st[i].fi;
if (v > seg.se && seg.se - seg.fi)
h.insert({seg.fi, seg.se - 1});
else {
if (v > seg.fi)
h.insert({seg.fi, v - 1});
if (v < seg.se)
h.insert({v + 1, seg.se});
}
}
out << ans;
return 0;
}