Cod sursa(job #767570)

Utilizator SteveStefan Eniceicu Steve Data 13 iulie 2012 20:35:28
Problema Lupul Urias si Rau Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.05 kb
#include <fstream>
#include <queue>
#include <algorithm>
#include <iostream>

using namespace std;

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

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

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

inline int 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 (int 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 ();
}

int Business () {
    int cnt = 0, j = 0;
    for (int i = mare; i >= 0; i--)
    {
        if (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;
}