Pagini recente » Cod sursa (job #695240) | Cod sursa (job #254264) | Cod sursa (job #3248606) | Cod sursa (job #2304336) | Cod sursa (job #3141068)
#include <fstream>
#include <vector>
#include <queue>
#include <algorithm>
using namespace std;
ifstream cin("lupu.in");
ofstream cout("lupu.out");
struct oaie{
long long dist;
long long blana;
bool operator <(const oaie &other)const{
return dist < other.dist;
}
};
vector <oaie> oi;
priority_queue <long long> pq;
int main() {
long long n, x, l;
long long sum = 0;
cin >> n >> x >> l;
for(long long i = 0; i < n; i++){
oaie coaie;
cin >> coaie.dist >> coaie.blana;
oi.push_back(coaie);
}
sort(oi.begin(), oi.end());
long long nivel = (x - oi[0].dist) / l;
for(long long i = 0; i < n; i++) {
long long candidateNivel = (x - oi[i].dist) / l;
if (candidateNivel < nivel) {
for(long long j = 1; j <= nivel - candidateNivel && !pq.empty(); j++)
{
sum += pq.top();
pq.pop();
}
nivel = (x - oi[i].dist) / l;
}
pq.push(oi[i].blana);
}
while(nivel && !pq.empty())
{
sum += pq.top();
pq.pop();
nivel--;
}
sum += pq.top();
cout << sum;
return 0;
}