Pagini recente » Cod sursa (job #1389910) | Cod sursa (job #1141928) | Cod sursa (job #2956505) | Cod sursa (job #160286) | Cod sursa (job #602132)
Cod sursa(job #602132)
#include<stdio.h>
#include<algorithm>
using namespace std;
struct sheep
{int d,p;};
sheep oi[100005];
inline bool comp(sheep a,sheep b)
{
if(a.d<b.d)
return 1;
if(a.d>b.d)
return 0;
if(a.p>b.p)
return 1;
return 0;
}
void down(int n, int k)
{
int fiu;
sheep temp;
do
{
fiu=0;
if(2*k<=n)
{
fiu=2*k;
if(2*k+1<=n&&oi[2*k+1].p>oi[fiu].p)
fiu=2*k+1;
}
if(fiu)
if(oi[fiu].p>oi[k].p)
{
temp.p=oi[k].p;
oi[k].p=oi[fiu].p;
oi[fiu].p=temp.p;
temp.d=oi[k].d;
oi[k].d=oi[fiu].d;
oi[fiu].d=temp.d;
k=fiu;
}
else
fiu=0;
}while(fiu);
}
inline void erase(int n)
{
oi[1].p=oi[n].p;
oi[n].p=0;
down(n-1,1);
}
inline void build(int n)
{
int i;
for(i=n/2;i>=1;--i)
down(n,i);
}
int main()
{
freopen("lupu.in","r",stdin);
freopen("lupu.out","w",stdout);
int n,d,l,i,j,s=0;
scanf("%d%d%d",&n,&d,&l);
for(i=1;i<=n;++i)
scanf("%d%d",&oi[i].d,&oi[i].p);
sort(oi+1,oi+1+n,comp);
i=1;
for(j=0;j<=d;j=j+l)
{
for(;i<=n&&oi[i].d<=j;++i);
if(i-1)
{
build(i-1);
s=s+oi[1].p;
erase(i);
}
}
printf("%d\n",s);
return 0;
}