Pagini recente » Cod sursa (job #2373928) | Cod sursa (job #1078165) | Cod sursa (job #2978603) | Cod sursa (job #2944694) | Cod sursa (job #428484)
Cod sursa(job #428484)
#include<stdio.h>
#include<algorithm>
using namespace std;
FILE *f=fopen("lupu.in","r");
FILE *g=fopen("lupu.out","w");
int i,j,n,x,l,d,tmax,a[100001],nr,k,y,maxim,p;
struct oaie{
int lana;
int t;
} oi[100001];
long long total;
int cmp(oaie a, oaie b){
return(a.t>b.t);
}
void combheap(int i, int u){
int s,d;
while(2*i<=u)
{ maxim=a[i];
s=2*i;
d=2*i+1;
if(maxim<a[s])
{ maxim=a[s];
p=s;
}
if(maxim<a[d] && d<=u)
{ maxim=a[d];
p=d;
}
if(maxim!=a[i]){
d=a[i];
a[i]=maxim;
a[p]=d;
i=p;
}
else
break;
}
}
int main(){
nr=0;k=0;
fscanf(f,"%d%d%d",&n,&x,&l);
for(i=1;i<=n;i++){
fscanf(f,"%d%d",&d,&oi[i].lana);
if(x-d>=0)
oi[i].t=1+(x-d)/l;
else oi[i].t=-1;
if(oi[i].t>tmax)
tmax=oi[i].t;
}
sort(oi+1,oi+n+1,cmp);
i=0;
for(j=tmax;j>=1;j--){
while(i<=n&&oi[i+1].t==j)
{i++;
y=oi[i].lana;
nr++;
k=nr;
while(k>1&&y>a[k/2]){
a[k]=a[k/2];
k=k/2;
}
a[k]=y;
}
if(nr>0){
total+=a[1];
a[1]=-1;
combheap(1,nr);
if(a[nr-1]==-1)
a[nr-1]=a[nr];
nr--;
}
}
fprintf(g,"%lld",total);
return 0;
}