Pagini recente » Cod sursa (job #2793034) | Cod sursa (job #467824) | Cod sursa (job #879599) | Cod sursa (job #2978589) | Cod sursa (job #2839797)
#include <fstream>
#include <algorithm>
#include <queue>
using namespace std;
const int N = 1e5;
pair <int, int> v[N];
priority_queue <int, vector <int>, greater<int>> h;
bool cmp(pair<int, int> x, pair<int, int> y)
{
return (x.first > y.first);
}
int main()
{
ifstream in("lupu.in");
ofstream out("lupu.out");
int n, dmax, dc;
in >> n >> dmax >> dc;
for (int i = 0; i < n; i++)
{
in >> v[i].first >> v[i].second;
}
in.close();
sort(v, v + n, cmp);
long long lana = 0;
int timp_c = 0;
for (int i = 0; i < n; i++)
{
long long distanta = v[i].first + (long long)timp_c *dc;
if (distanta <= dmax)
{
lana += v[i].second;
h.push(v[i].second);
timp_c++;
}
else///nu poate lua oaia la momentul curent
{
if (!h.empty() && v[i].second > h.top())///daca ar fi meritat sa o ia in locul alteia
{
lana += v[i].second - h.top();
h.pop();
h.push(v[i].second);
}
}
}
out << lana;
out.close();
return 0;
}