Cod sursa(job #2999169)

Utilizator PHOSSESSEDProsie Radu-Teodor PHOSSESSED Data 10 martie 2023 16:00:09
Problema Lupul Urias si Rau Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.58 kb
#include<fstream>
#include<vector>
#include<queue>
#include<algorithm>
using namespace std;

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

struct oaie
{
    int dist,lana,last;
};

vector<oaie> oi;

bool cmp(oaie &a,oaie &b)
{
    return a.last > b.last;
}

int main()
{
    int n,x,l; cin >> n >> x >> l;
    oi.resize(n + 1);
    for(int i = 1; i <= n ; i++)
        {
            cin >> oi[i].dist >> oi[i].lana;
            if(oi[i].dist > x) oi[i].last = -1;
            else
                {
                    int c = x - oi[i].dist;
                    oi[i].last = c / l; oi[i].last++;
                }
        }

    sort(oi.begin() + 1,oi.begin() + n + 1,cmp);
    priority_queue<int> pq; long long ans = 0;

    int now = 1;
    while(now <= n)
        {
            int mut = now; if(oi[now].last == -1) break;
            while(oi[now].last == oi[mut].last && mut <= n)
                {
                    pq.push(oi[mut].lana);
                    mut++;
                }

            if(mut == n + 1)
                {
                    while(oi[now].last-- && !pq.empty())
                        {
                            ans += pq.top();
                            pq.pop();
                        }

                    break;
                }

            int am = oi[now].last - max(0,oi[mut].last);
            while(am && !pq.empty())
                {
                    ans += pq.top(); pq.pop();
                    am--;
                }

            now = mut;
        }

    cout << ans;
}