Pagini recente » Cod sursa (job #3333540) | Cod sursa (job #3347579) | Cod sursa (job #3340392) | Cod sursa (job #3343477) | Cod sursa (job #3342274)
#include <fstream>
#include <algorithm>
#include <queue>
#define NMAX 100002
#define INF 1e9
using namespace std;
ifstream fin ("lupu.in");
ofstream fout ("lupu.out");
struct oaie{int lana, it;};
int n, x, l;
oaie a[NMAX]; //a[i].it = la al catalea pas pot maxim sa o iau
priority_queue<int> pq;
int pmax; //cate oi pot alege maxim = max(a[i].it) pt orice i = 1, n
bool compar(oaie a, oaie b)
{
if(a.it == b.it) return a.lana > b.lana;
return a.it > b.it;
}
int main()
{
int i, d, aux;
fin>>n>>x>>l;
for(i = 1; i <= n; i++)
{
fin>>d>>aux;
if(d > x) //oricum nu as putea sa o iau
{
n--; //nu voi mai salva datele despre oile la care oricum nu as putea ajunge
i--;
}
else
{
a[i].it = (x - d) / l + 1;
pmax = max(pmax, a[i].it);
a[i].lana = aux;
}
}
sort(a + 1, a + n + 1, compar);
long long int rez = 0;
int alese = 0;
int indic = 1;
while(alese < pmax)
{
while(a[indic].it == pmax - alese) {pq.push(a[indic].lana); indic++;}
rez += pq.top(); pq.pop();
alese++;
}
fout<<rez<<'\n';
return 0;
}