Pagini recente » Cod sursa (job #694901) | Cod sursa (job #1042737) | Cod sursa (job #2061959) | Cod sursa (job #1316506) | Cod sursa (job #806154)
Cod sursa(job #806154)
#include<cstdio>
#include<algorithm>
using namespace std;
int nh, h[100001];
void schimb(int &a, int &b)
{
int pahar=a;
a=b;
b=pahar;
}
void urca(long long p)
{
if(p==1 || h[p]>=h[p/2])
return;
schimb(h[p],h[p/2]);
urca(p/2);
}
struct oaie
{
int km;
int kg;
}oi[100001];
void coboara(long long p)
{
long long fs=2*p,fd=2*p+1,t=p;
if(fs<=nh && h[fs]<=h[t])
t=fs;
if(fd<=nh && h[fd]<=h[t])
t=fd;
if(t!=p){
schimb(h[p],h[t]);
coboara(t);
}
}
bool cmp(oaie a, oaie b)
{
if(a.km==b.km)
return a.kg>b.kg;
return a.km>b.km;
}
int main()
{
int n,x,l;
freopen("lupu.in","r",stdin);
freopen("lupu.out","w",stdout);
scanf("%d%d%d",&n,&x,&l);
for(int i=1;i<=n;i++)
scanf("%d%d",&oi[i].km,&oi[i].kg);
sort(oi+1,oi+n+1,cmp);
int miscari=0;
for(int i=1;i<=n;i++)
{
if(oi[i].km+miscari*l<=x)
{
h[++nh]=oi[i].kg;
miscari++;
urca(nh);
}
else
{
if(oi[i].kg>h[1])
{
h[++nh]=oi[i].kg;
schimb(h[1],h[nh--]);
coboara(1);
}
}
}
int sum=0;
for(int i=1;i<=nh;i++)
sum+=h[i];
printf("%d",sum);
return 0;
}