Pagini recente » Cod sursa (job #2447976) | Cod sursa (job #1235727) | Cod sursa (job #1706728) | Cod sursa (job #980724) | Cod sursa (job #1894242)
#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-minDist+1)/L;
int distFromWolf = rem*L;
int i = 1;
while (0<=distFromWolf) {
while (i<=N && v[i].dist + distFromWolf <= X) {
h.push(v[i++].val);
}
if (!h.empty()) {
sol += h.top();
h.pop();
}
distFromWolf -= L;
}
out<<sol;
return 0;
}