Pagini recente » Cod sursa (job #2707028) | Cod sursa (job #2707232) | Cod sursa (job #1668252) | Cod sursa (job #1089637) | Cod sursa (job #602150)
Cod sursa(job #602150)
#include<stdio.h>
#include<stdlib.h>
struct oi
{
long d,l;
};
oi o[100005];
long h[100004],u;
int cmp( const void *a,const void *b)
{
oi *pa,*pb;
pa=(oi*)a;
pb=(oi*)b;
if(pa->d==pb->d)
return 0;
if(pa->d<pb->d)
return -1;
return 1;
}
void down(int k)
{
int fiu,aux;
do
{
fiu=0;
if(2*k<=u)
fiu=2*k;
if(2*k+1<=u&&h[2*k+1]>h[fiu])
fiu=2*k+1;
if(h[fiu]>h[k])
{
aux=h[fiu];
h[fiu]=h[k];
h[k]=aux;
k=fiu;
}
else
fiu=0;
}while(fiu!=0);
}
void up(int k)
{
int aux;
while(h[k]>h[k/2]&&k>1)
{
aux=h[k];
h[k]=h[k/2];
h[k/2]=aux;
k=k/2;
}
}
void insert(int k)
{
h[++u]=k;
up(u);
}
void stergere(int k)
{
h[k]=h[u];
down(k);
}
int main()
{
freopen("lupu.in","r",stdin);
freopen("lupu.out","w",stdout);
long n,i,dist=0,t=0,x,l;
scanf("%ld%ld%ld",&n,&x,&l);
for(i=1;i<=n;i++)
scanf("%ld%ld",&o[i].d,&o[i].l);
qsort(o+1,n,sizeof(o[0]),cmp);
i=1;
for(i=1;i<=n;i++)
if(o[i].d==0)
t=t+o[i].l;
else
break;
while(i<=n)
{
dist=dist+l;
while(o[i].d<=dist && i<=n)
{
insert(o[i].l);
i++;
}
t=t+h[1];
stergere(1);
}
printf("%ld\n",t);
return 0;
}