Pagini recente » Cod sursa (job #2871517) | Cod sursa (job #2553997) | Cod sursa (job #2398580) | Cod sursa (job #2333990) | Cod sursa (job #2458095)
#include <fstream>
#include <algorithm>
#include <set>
#define NMAX 100005
using namespace std;
ifstream fin("gutui.in");
ofstream fout("gutui.out");
struct chestie
{
int grupa, gr;
bool operator <(chestie val)const{
return this->gr < val.gr;
}
} v[NMAX];
inline bool cmp1(chestie a, chestie b)
{
if(a.grupa == b.grupa)
return (a.gr > b.gr);
return (a.grupa < b.grupa);
}
multiset<chestie> taken;
int main()
{
int n, hm, u;
fin >> n >> hm >> u;
for(int i = 1; i <= n; ++i)
{
int h, g;
fin >> h >> g;
v[i].grupa = (hm - h) / u + 1;
v[i].gr = g;
}
sort(v + 1, v + n + 1, cmp1);
int i = 1;
int grup = v[1].grupa;
while(grup <= v[n].grupa)
{
while(v[i].grupa == grup - 1)
++i;
while(taken.size() != grup && i <= n){
taken.insert(v[i]);
++i;
grup = v[i].grupa;
}
while(v[i].grupa == grup){
if((*taken.begin()).gr < v[i].gr){
taken.erase(taken.begin());
taken.insert(v[i]);
}
else break;
++i;
}
++grup;
}
long long s = 0;
for(auto it: taken)
s += it.gr;
fout << s << '\n';
return 0;
}