Cod sursa(job #3141609)

Utilizator toma_ariciuAriciu Toma toma_ariciu Data 14 iulie 2023 20:06:52
Problema Lupul Urias si Rau Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.17 kb
#include <fstream>
#include <vector>
#include <queue>
#include <algorithm>

using namespace std;

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

struct oaie{
    int dist;
    int blana;
    bool operator <(const oaie &other)const{
        return dist < other.dist;
    }
};

vector <oaie> oi;
priority_queue <int> pq;

int main() {
    int n, x, l;
    long long sum = 0;
    cin >> n >> x >> l;
    for(int i = 0; i < n; i++){
        oaie coaie;
        cin >> coaie.dist >> coaie.blana;
        if(coaie.dist <= x)
            oi.push_back(coaie);
    }
    sort(oi.begin(), oi.end());
    int nivel = x/ l + 1;

    for(int i = 0; i < oi.size(); i++) {
        int candidateNivel = (x - oi[i].dist) / l + 1;
        if (candidateNivel < nivel) {
            for(int j = 0; j < nivel - candidateNivel && !pq.empty(); j++) {
                sum += pq.top();
                pq.pop();
            }
            nivel = (x - oi[i].dist) / l + 1;
        }
        pq.push(oi[i].blana);
    }
    while(nivel && !pq.empty()) {
        sum += pq.top();
        pq.pop();
        nivel--;
    }
//    pq.pop();
    cout << sum;
    return 0;
}