Pagini recente » Cod sursa (job #1033208) | Cod sursa (job #1118947) | Cod sursa (job #1041045) | Cod sursa (job #2810409) | Cod sursa (job #1318971)
#include <iostream>
#include <fstream>
#include <vector>
#include <algorithm>
#include <queue>
using namespace std;
ifstream in("lupu.in");
ofstream out("lupu.out");
const int Nmax = 100005;
int n, x, l;
int time[Nmax];
int reward[Nmax];
int ind[Nmax];
struct compare1 {
bool operator () (int i, int j) { return reward[i] < reward[j]; }
};
priority_queue<int, vector<int>, compare1> prt_queue;
struct compare2 {
bool operator () (int i, int j) { return time[i] < time[j]; }
} comp;
int main() {
int distance;
int max_time = 0;
int result = 0;
in >> n >> x >> l;
for (int i = 1; i <= n; ++i) {
in >> distance >> reward[i];
if (distance > x) time[i] = -1;
else time[i] = (x - distance) / l;
max_time = max(max_time, time[i]);
ind[i] = i;
}
sort(ind + 1, ind + n + 1, comp);
for (int i = n, j = max_time; j >= 0; --j) {
while (time[ind[i]] >= j && i > 0) {
prt_queue.push(ind[i]);
--i;
}
result += reward[prt_queue.top()];
prt_queue.pop();
}
out << result << '\n';
return 0;
}