Pagini recente » Cod sursa (job #626817) | Cod sursa (job #84084) | Cod sursa (job #3163498) | Cod sursa (job #2606940) | Cod sursa (job #2500442)
#include <fstream>
#include <algorithm>
using namespace std;
ifstream fin ("lupu.in");
ofstream fout ("lupu.out");
long long tata[100005];
long long ans, n, x, l;
bool b[100005];
pair <long long, long long> a[100005];
long long find_tata(long long nod) {
while (tata[nod] >= 0)
nod = tata[nod];
return nod;
}
void set_tata(long long nod, long long t) {
while (tata[nod] >= 0) {
long long aux = nod;
nod = tata[nod];
tata[aux] = t;
}
}
bool ok(long long dist) {
long long pas = (x - dist) / l;
long long t = find_tata(pas);
set_tata(pas, t);
if (b[t])
return false;
tata[t] = t - 1;
if (t == 1)
tata[t] = -1;
b[t] = true;
return true;
}
int main() {
fin >> n >> x >> l;
tata[0] = -1;
for (long long i = 1; i <= n; ++i) {
fin >> a[i].second >> a[i].first;
tata[i] = -1;
}
sort (a + 1, a + n + 1);
for (long long i = n; i; --i) {
if (ok(a[i].second)) {
ans += a[i].first;
}
}
fout << ans;
return 0;
}