Cod sursa(job #767575)

Utilizator SteveStefan Eniceicu Steve Data 13 iulie 2012 20:42:36
Problema Lupul Urias si Rau Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.06 kb
#include <fstream>
#include <queue>
#include <algorithm>

using namespace std;

#define ll long long
#define max(a, b) (a > b ? a : b)

typedef struct {
    ll D;
    ll Lana;
} cutzu;

ll N, X, L, mare;
cutzu v[100005];
priority_queue <ll> hp;

inline long long cmp (cutzu a, cutzu b) {
    if (a.D == b.D) return (a.Lana > b.Lana);
    return (a.D > b.D);
}

void Citire () {
    ifstream fin ("lupu.in");
    fin >> N >> X >> L;
    for (long long i = 0; i < N; i++)
    {
        fin >> v[i].D >> v[i].Lana;
        v[i].D = (X - v[i].D) / L;
        mare = max (mare, v[i].D);
    }
    sort (v, v + N, cmp);
    fin.close ();
}

long long Business () {
    long long cnt = 0, j = 0;
    for (long long i = mare; i >= 0; i--)
    {
        while (v[j].D == i) hp.push (v[j].Lana), j++;
        if (!hp.empty ()) cnt += hp.top (), hp.pop ();
    }
    return cnt;
}

void Scriere () {
    ofstream fout ("lupu.out");
    fout << Business ();
    fout.close ();
}

int main () {
    Citire ();
    Scriere ();
    return 0;
}