Pagini recente » Cod sursa (job #24869) | Cod sursa (job #2108547) | Rating Marinescu Radu (MarinescuRadu) | Cod sursa (job #2550591) | Cod sursa (job #221506)
Cod sursa(job #221506)
#include<stdio.h>
#define NMAX 100000
struct bee{int d,a,g;};
bee v[NMAX+1];
void poz(int li,int ls,int &piv){
int i=li,j=ls,d=0;
bee aux;
while(i<j){
if(v[i].g>v[j].g||
v[i].g==v[j].g&&v[i].a<v[j].a){
aux=v[i];v[i]=v[j];v[j]=aux;d=1-d;
}
i+=d;
j-=1-d;
}
piv=i;
}
void qsrt(int st,int dr){
int piv;
if(st<dr){
poz(st,dr,piv);
qsrt(st,piv-1);
qsrt(piv+1,dr);
}
}
int main(){
freopen("lupu.in","r",stdin);
freopen("lupu.out","w",stdout);
int n,x,l,gmax,rmax;
scanf("%d%d%d",&n,&x,&l);
gmax=x/l+1;
rmax=x%l;
if(rmax==0) rmax=l;
int i;
for(i=1;i<=n;++i){
scanf("%d%d",&v[i].d,&v[i].a);
if(v[i].d>x) {v[i].g=gmax+1;continue;}
v[i].g=(x-v[i].d)/l+1;
}
qsrt(1,n);
long long s=0L;
int amluat,j=1;
for(i=1;i<=gmax&&j<=n;++i){
if(v[j].g>gmax) break;
if(v[j].g>i) s+=v[j].a,j++;
else if(v[j].g==i) {
s+=v[j].a;
while(j<=n&&v[j].g==i) j++;
}
}
printf("%lld",s);
return 0;
}