Cod sursa(job #3267552)

Utilizator Raul_AArdelean Raul Raul_A Data 11 ianuarie 2025 13:19:46
Problema Lupul Urias si Rau Scor 88
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.28 kb
#include <bits/stdc++.h>
#define ll long long
#define int ll
#define ld long double
#define pii pair<int, int>
#define tpl tuple<int, int, int>
#define piv pair<int, vector<int>>
#define eb emplace_back
#define oo INT_MAX / 2
#define OO LLONG_MAX / 2
using namespace std;

const string fn("lupu");

ifstream in(fn + ".in");
ofstream out(fn + ".out");

#define cin in
#define cout out

int N, X, L;
map<int, priority_queue<int>> M;
priority_queue<int> pqans;

void solve()
{
    cin >> N >> X >> L;
    ///assert(L > 0);
    for (int i = 1; i <= N; i++)
    {
        int d, a;
        cin >> d >> a;

        int r = 0;

        r = (X - d) / L;
        M[r].emplace(a);

        /// cout<<a<<' '<<d<<' '<<r<<'\n';
    }

    int timer = M.rbegin()->first, ans = 0;

    for (auto x=M.rbegin();x!=M.rend();x++)
    {
        auto pq = x->second;
        while (pq.size())
            pqans.emplace(pq.top()), pq.pop();
        while (timer>=0 and timer >= x->first and pqans.size())
            ans += pqans.top(), pqans.pop(), timer--;
    }

    while(timer>=0 and pqans.size())
        ans+=pqans.top(),pqans.pop(),timer--;

    cout << ans;
}

signed main()
{
    int q = 1;

    /// cin >> q;
    while (q--)
        solve();
    return 0;
}