Pagini recente » Cod sursa (job #1025935) | Cod sursa (job #1540439) | Cod sursa (job #1297824) | Cod sursa (job #84664) | Cod sursa (job #2458093)
#include <fstream>
#include <algorithm>
#include <vector>
#define NMAX 100005
using namespace std;
ifstream fin("gutui.in");
ofstream fout("gutui.out");
struct chestie
{
int grupa, 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);
}
inline bool cmp2(chestie a, chestie b){
return a.gr < b.gr;
}
vector<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.push_back(v[i]);
++i;
grup = v[i].grupa;
}
while(v[i].grupa == grup){
sort(taken.begin(), taken.end(), cmp2);
if(taken[0].gr < v[i].gr)
taken[0] = v[i];
else break;
++i;
}
++grup;
}
long long s = 0;
for(int i = 0; i < taken.size(); ++i)
s += taken[i].gr;
fout << s << '\n';
return 0;
}