Pagini recente » Cod sursa (job #2544136) | Cod sursa (job #2551452) | Cod sursa (job #2749872) | Cod sursa (job #2887159) | Cod sursa (job #709615)
Cod sursa(job #709615)
#include<stdio.h>
#include<algorithm>
using namespace std;
FILE*f=fopen("lupu.in","r");
FILE*g=fopen("lupu.out","w");
int nr,n,x,l;
long long sol;
struct oi
{
int d,a;
}v[100001];
int cmp(oi a,oi b)
{
return a.d<b.d;
}
struct heap
{
int x,i;
}d[100001];
char viz[100001];
void insert(int x,int i)
{
d[++nr].x=x;
d[i].i=nr;
int k=nr;
while(k>1&&d[k/2].x<d[k].x)
{
d[0]=d[k];
d[k].x=d[k/2].x;
d[k/2].x=d[0].x;
d[k].i=d[k/2].i;
d[k/2].i=d[0].i;
k/=2;
}
}
void down(int x,int k)
{
d[k]=d[nr--];
int son;
do
{
son=0;
if(2*k<=nr)
son=2*k;
if(2*k+1<=nr&&d[son].x<d[2*k+1].x)
son++;
if(d[son].x>d[k].x)
{
d[0]=d[k];
d[k].x=d[son].x;
d[son].x=d[0].x;
d[k].i=d[son].i;
d[son].i=d[0].i;
k=son;
}
else
son=0;
}while(son);
}
int main()
{
fscanf(f,"%d%d%d",&n,&x,&l);
for(int i=1;i<=n;++i)
fscanf(f,"%d%d",&v[i].d,&v[i].a);
sort(v+1,v+n+1,cmp);
for(int i=1;i<=n;++i)
if(v[i].d<=x)
insert (v[i].a,i);
else
break;
int ll=l;
while(nr)
{
int max=0;
for(int i=nr;v[i].d+ll>x&&i;--i)
if(max<v[i].a)
max=v[i].a;
sol+=max;
for(int i=nr;v[i].d+ll>x&&i;--i)
--nr;
ll+=l;
}
fprintf(g,"%lld",sol);
fclose(f);
fclose(g);
return 0;
}