Pagini recente » Cod sursa (job #2843416) | Cod sursa (job #1137907) | Cod sursa (job #1133022)
#include<fstream>
#include<algorithm>
#include<set>
#define NMAX 100010
using namespace std;
ifstream f("lupu.in");
ofstream g("lupu.out");
struct oaie
{
int d, c;
}a[NMAX];
multiset<int> solutie, sl;
int n, L, x;
void Citeste()
{
int i;
f>>n>>x>>L;
for (i=1; i<=n; ++i)
f>>a[i].d>>a[i].c;
}
bool cmp(oaie A, oaie B)
{
return A.d>B.d;
}
void Solve()
{
int i=1, lg=1;
multiset<int> :: iterator is, isolutie;
sort(a+1, a+n+1, cmp);
while (a[i].d>x) ++i;
x-=L;
while (i<=n && x>=-L)
{
while (i<=n && a[i].d>x)
{
if (solutie.size()<lg) solutie.insert(a[i].c);
else
{
isolutie=solutie.begin();
if (*isolutie<a[i].c)
{
solutie.erase(isolutie);
solutie.insert(a[i].c);
}
}
++i;
}
++lg; x-=L;
}
}
void Scrie()
{
multiset<int> :: iterator isolutie;
long long x, sum=0;
while (!solutie.empty())
{
isolutie=solutie.begin();
x=*isolutie;
sum+=x;
solutie.erase(isolutie);
}
g<<sum<<"\n";
}
int main()
{
Citeste();
Solve();
Scrie();
f.close();
g.close();
return 0;
}