Pagini recente » Cod sursa (job #2432377) | Cod sursa (job #704249) | Cod sursa (job #1892752) | Cod sursa (job #25200) | Cod sursa (job #807252)
Cod sursa(job #807252)
#include <fstream>
#include <algorithm>
using namespace std;
ifstream in("lupu.in");
ofstream out("lupu.out");
struct oaie{
int d;
int w;};
oaie a[100001];
long long sum;
int v[100011],n,l,nh, p, x, i;
void schimba (int z, int u)
{
int aux;
aux=v[z];
v[z]=v[u];
v[u]=aux;
}
bool cmp (oaie z, oaie u)
{
if (z.d==u.d) return z.w>u.w;
return z.d>u.d;
}
void urc (int p)
{
if (p==1||v[p]>=v[p/2]) return;
schimba (v[p],v[p/2]);
urc (p/2);
}
void cobor(int p)
{
int fs,fd,plm;
fs=p*2;
plm=p;
fd=p*2+1;
if (fs<=nh&&v[fs]<v[plm]) plm=fs;
if (fd<=nh&&v[fd]<v[plm]) plm=fd;
if (plm!=p)
{
schimba(p,plm);
cobor(plm);
}
}
int main()
{
in>>n>>x>>l;
for (i=1;i<=n;i++)
{
in>>a[i].d>>a[i].w;
}
p=0; nh=0; sum=0;
sort (a+1,a+n+1,cmp);
for (i=1;i<=n;i++)
{
if (a[i].d+p*l<=x)
{
v[++nh]=a[i].w;
p++;
urc(nh);
}else
{
if(v[1]<a[i].w)
{
v[1]=a[i].w;
cobor(1);
}
}
}
for (i=1;i<=nh;i++) sum=sum+v[i];
out<<sum;
return 0;
}