Pagini recente » Istoria paginii runda/tagalaibas | Cod sursa (job #908863) | Cod sursa (job #1932562) | Borderou de evaluare (job #702956) | Cod sursa (job #3169300)
#include <iostream>
#include <fstream>
#include <algorithm>
#include <queue>
#define N_MAX 100001
using namespace std;
ifstream in ("lupu.in");
ofstream out ("lupu.out");
long long n, max_distance, rez_wool, rate;
priority_queue <int> heap;
struct sheep {
int wool, distance;
}arr[N_MAX];
bool comp (sheep x, sheep y){
if (x.distance < y.distance)
return true;
return false;
}
void solve (){
int index = 1, current_wool = 0;
for (int i=max_distance%rate; i<=max_distance; i+=rate){
for (; index<=n && arr[index].distance <= i;){
heap.push (arr[index++].wool);
}
if (!heap.empty()){
current_wool = heap.top();
heap.pop();
}
rez_wool += current_wool;
current_wool = 0;
}
out << rez_wool;
}
int main (){
in >> n >> max_distance >> rate;
for (int i=1; i<=n; ++i){
in >> arr[i].distance >> arr[i].wool;
}
sort (arr + 1, arr + n + 1, comp);
// for (int i=1; i<=n; ++i)
// cout << arr[i].distance << ' ' << arr[i].wool << '\n';
solve ();
return 0;
}