Cod sursa(job #2839797)

Utilizator rapidu36Victor Manz rapidu36 Data 26 ianuarie 2022 16:41:13
Problema Lupul Urias si Rau Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.17 kb
#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;
}