Pagini recente » Cod sursa (job #516262) | Cod sursa (job #2370839) | Cod sursa (job #2621380) | Cod sursa (job #379993) | Cod sursa (job #22530)
Cod sursa(job #22530)
#include <stdio.h>
#include <vector>
#include <iterator>
#include <set>
using namespace std;
#define in "lupu.in"
#define out "lupu.out"
vector<int> val;
struct Functor {
bool operator () (int i, int j)
{
return val[i] > val[j];
}
};
vector< vector<int> > ts;
vector<int> timp;
multiset<int, Functor> s;
int n, d, t;
int main()
{
int tmax=0, x;
freopen(in,"r",stdin);
freopen(out,"w",stdout);
scanf("%d%d%d",&n,&t,&d);
val.resize(n+1);
timp.resize(n+1);
ts.resize(7500);
for ( int i = 1; i <= n; i++ )
{
scanf("%d%d",&x,&val[i]);
if ( x > t ) timp[i] = -1;
else
{
timp[i] = (t-x)/d;
ts[timp[i]].push_back(i);
}
if ( tmax < (t-x)/d ) tmax = (t-x)/d;
}
// ts.resize(tmax+1);
/* for ( int i = 1; i <= n; i++ )
{
if ( timp[i] != -1 ) ts[timp[i]].push_back(i);
}*/
long long maxim=0;
for ( int j = tmax; j >= 0; j-- )
{
if ( ts[j].size() != 0 )
{
for ( int i = 0; i < ts[j].size(); i++ )
{
s.insert(ts[j][i]);
}
}
maxim += val[*s.begin()];
s.erase(s.begin());
}
printf("%lld",maxim);
}