Pagini recente » Cod sursa (job #2111532) | Cod sursa (job #2768297) | Cod sursa (job #917877) | Cod sursa (job #2922422) | Cod sursa (job #2832226)
#include <algorithm>
#include <fstream>
using namespace std;
struct Oaie {
int lana, timp;
} v[100005];
int H[100005], lh;
void add(int x) {
H[++lh] = x;
int clh = lh;
while (clh > 1 && H[clh / 2] < H[clh]) {
swap(H[clh / 2], H[clh]);
clh /= 2;
}
}
void heap_down(int idx) {
int left = 2 * idx, right = 2 * idx + 1, best = idx;
if (left <= lh && H[left] > H[best])
best = left;
if (right <= lh && H[right] > H[best])
best = right;
if (best != idx) {
swap(H[best], H[idx]);
heap_down(best);
}
}
void del() {
swap(H[1], H[lh]);
lh--;
heap_down(1);
}
int cmp(Oaie a, Oaie b) { return a.timp > b.timp; }
int main() {
ifstream cin("lupu.in");
ofstream cout("lupu.out");
int n, x, l, dist, maxt = 0;
cin >> n >> x >> l;
for (int i = 1; i <= n; i++) {
cin >> dist >> v[i].lana;
v[i].timp = (x - dist) / l + 1;
maxt = max(maxt, v[i].timp);
}
sort(v + 1, v + n + 1, cmp);
int j = 1, suml = 0;
for (int i = maxt; i >= 1; i--) {
while (j <= n && v[j].timp == i)
add(v[j++].lana);
if (lh > 0) {
suml += H[1];
del();
}
}
cout << suml;
return 0;
}