Pagini recente » Cod sursa (job #3350435) | Borderou de evaluare (job #3338572) | Cod sursa (job #3354890) | Monitorul de evaluare | Cod sursa (job #3341682)
#include <fstream>
#include <algorithm>
#include <queue>
#define NMAX 100002
using namespace std;
ifstream fin("lupu.in");
ofstream fout("lupu.out");
int n,x,l;
struct oaie
{
int l,t;
};
oaie v[NMAX];
int nrv;
int tmax;
bool compar(oaie a,oaie b)
{
if(a.t==b.t) return a.l>b.l;
return a.t>b.t;
}
priority_queue<int> q;
int ans;
int main()
{
int a,d,i,timp,maxim;
fin>>n>>x>>l;
for(i=1; i<=n; i++)
{
fin>>d>>a;
if(l==0)
{
if(d<=x)
{
timp=x-d+1;
nrv++;
v[nrv].l=a;
v[nrv].t=timp;
if(timp>tmax) tmax=timp;
}
}
if(d<=x)
{
timp=(x-d)/l+1;
nrv++;
v[nrv].l=a;
v[nrv].t=timp;
if(timp>tmax) tmax=timp;
}
}
sort(v+1,v+nrv+1,compar);
v[++nrv].t=-1;
for(i=1; i<=nrv; i++)
if(v[i].t==tmax)
q.push(v[i].l);
else
{
if(q.size())
{
maxim=q.top();
q.pop();
ans+=maxim;
}
tmax--;
if(v[i].t==-1) break;
i--;
}
while(tmax>=1 && q.size())
{
ans+=q.top();
q.pop();
tmax--;
}
fout<<ans;
return 0;
}