Cod sursa(job #2032860)

Utilizator circeanubogdanCirceanu Bogdan circeanubogdan Data 5 octombrie 2017 19:56:31
Problema Lupul Urias si Rau Scor 16
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.11 kb
#include <fstream>
#include <algorithm>
#include <vector>
#include <queue>
#define DIM 100002

using namespace std;

ifstream f("lupu.in");
ofstream g("lupu.out");

int n;

long long s, x, l, val, maxim, curent, scop;

struct oaie
{
    long long d, lana;
}oi[DIM];

bool cmp(oaie a, oaie b)
{
    if(a.d == b.d)
        return a.lana < b.lana;
    return a.d < b.d;
}

priority_queue <long long> h;

int main()
{
    f>>n>>x>>l;

    for(int i = 1; i <= n; ++ i)
    {
        f>>oi[i].d>>oi[i].lana;
        val = (x - oi[i].d) / l + 1;
        if(maxim < val)
            maxim = val;
        if(val > 0)
        {
            oi[i].d = val;
        }
    }

    sort(oi + 1, oi + n + 1, cmp);

    for(int i = n; i >= 0; -- i)
    {
        if(oi[i].d != oi[i + 1].d)
        {
            scop = oi[i].d;
            curent = 0;
            if(!h.empty())
            {
                s += h.top();
                h.pop();
            }
        }
        ++ curent;
        if(curent <= scop)
            h.push(oi[i].lana);
    }

    g<<s;

    return 0;
}