Pagini recente » Cod sursa (job #1337665) | Cod sursa (job #1220102) | Cod sursa (job #1703483) | Cod sursa (job #980747) | Cod sursa (job #1894253)
#include <iostream>
#include <fstream>
#include <algorithm>
#include <queue>
#include <climits>
using namespace std;
ifstream in("lupu.in");
ofstream out("lupu.out");
const int NMax = 100000 + 5;
int N,X,L,sol;
priority_queue<int> h;
struct elem {
int dist,val;
}v[NMax];
bool cmp (elem a,elem b) {
return a.dist<b.dist;
}
int main() {
in>>N>>X>>L;
for (int i=1;i<=N;++i) {
in>>v[i].dist>>v[i].val;
}
sort(v+1,v+N+1,cmp);
int minDist = v[1].dist;
if (minDist > X) {
cout<<0;
return 0;
}
int rem = X/L;
int addedDistance = rem*L;
int i = 1;
while (0<=addedDistance) {
while (i<=N && (v[i].dist + addedDistance <= X)) {
h.push(v[i++].val);
}
if (!h.empty()) {
sol += h.top();
h.pop();
}
addedDistance -= L;
}
out<<sol;
return 0;
}