Cod sursa(job #1429126)

Utilizator taigi100Cazacu Robert taigi100 Data 5 mai 2015 18:49:45
Problema Lupul Urias si Rau Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.19 kb
/*
    Keep It Simple!
*/

#include <fstream>
#include <vector>
#include <list>
#include <stack>
#include <string>
#include <cmath>
#include <queue>
#include <vector>
#include <algorithm>

using namespace std;

ifstream cin("lupu.in");
ofstream cout("lupu.out");

#define ll long long
#define mp make_pair
#define fi first
#define se second
#define pb push_back

typedef pair<int,int> pii;
typedef pair<ll,ll> pll;

const int kMaxN = 1e5 + 5;
pii T[kMaxN];
priority_queue<int> que;

void Solve()
{
    int N, X, L, Tmax = 0;
    long long ans = 0;
    cin >> N >> X >> L;

    for (int i = 1, x; i <= N; ++i) {
        cin >> x >> T[i].second;
        T[i].first = (X-x) / L + 1;
    }

    sort(T + 1, T+N+1, greater<pii>());
    Tmax = T[1].first;

    for (int idx = 1; idx <= N && Tmax; --Tmax) {
        // add to queue.
        while (T[idx].first == Tmax && idx <= N) {
            que.push(T[idx].second);
            ++idx;
        }
        // get maximum and add to sol.
        if (!que.empty()) {
            ans += que.top();
            que.pop();
        }
    }

    cout << ans << '\n';
}

int main()
{
    Solve();
    return 0;
}