Cod sursa(job #3343177)

Utilizator nicoleta_iancuIancu Nicoleta nicoleta_iancu Data 26 februarie 2026 16:53:08
Problema Lupul Urias si Rau Scor 12
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.58 kb
#include <iostream>
#include <fstream>
#include <algorithm>
#include <queue>

using namespace std;
ifstream fin("lupu.in");
ofstream fout("lupu.out");
struct elem{
    long long nrTure;
    long long pufosenie;
    elem(long long turn ,int puf):nrTure(turn),pufosenie(puf){};
};
long long calcTure(long long &distMax,long long &dini,long long &lung){
    return (distMax-dini)/lung+1;//tura maxima la care poate sa l e ia  ,l.
}

bool cmp(const elem &a,const elem &b){
    return (a.nrTure<b.nrTure||(a.nrTure==b.nrTure && a.pufosenie>=b.pufosenie));
}
struct alese{
    bool operator ()(long long a,long long b){
        return a<b;
    }
};
int main()
{
    long long n,distMax,l;
    fin>>n>>distMax>>l;
    long long dIni,puf;
    vector<elem>v;
    for(int i=0;i<n;++i){
        fin>>dIni>>puf;
        if(dIni<=distMax){
            v.push_back(elem(calcTure(distMax,dIni,l),puf));
        }
    }
  //  cout<<endl<<endl;
    sort(v.begin(),v.end(),cmp);
    priority_queue<long long,vector<long long>,alese>pq;//ce oi am ales
    pq.push(v[0].pufosenie);
    long long available=1;
    long long luate=1;

    for(int i=1;i<v.size();++i){
        if(v[i].nrTure!=v[i-1].nrTure){
            available++;
        }
        if(available>luate){
            pq.push(v[i].pufosenie);
            ++luate;
        }
        else if(v[i].pufosenie>pq.top()){
            pq.pop();
            pq.push(v[i].pufosenie);
        }
    }
    long long sum=0;
    while(!pq.empty()){
        sum+=pq.top();
        pq.pop();
    }
    fout<<sum;
    return 0;
}