Pagini recente » Cod sursa (job #446581) | Cod sursa (job #2215583) | Cod sursa (job #1425812) | Cod sursa (job #867883) | Cod sursa (job #2063798)
#include <fstream>
using namespace std;
ifstream fin("lupu.in");
ofstream fout("lupu.out");
long long n,x,l,i,s;
struct oaie
{
long long d,l;
};
oaie o[100009],aux;
void creareheap();
void down(long long k, long long n);
long long extramax();
void del(long long k, long long &n);
void up(long long k, long long n);
int main()
{
fin>>n>>x>>l;
for(i=1;i<=n;i=i+1)
{
fin>>o[i].d>>o[i].l;
}
creareheap();
for(i=1;i<=n;i=i+1)
{
if(o[i].d>x)
{
del(i,n);
}
}
s=0;
while(n>0)
{
s=s+extramax();
for(i=n;i>=1;i=i-1)
{
if(o[i].d>x)
{
del(i,n);
}
}
}
fout<<s;
fin.close();
fout.close();
return 0;
}
void creareheap()
{
long long i;
for(i=n/2;i>=1;i=i-1)
{
down(i,n);
}
};
void down(long long k, long long n)
{
long long t,f;
t=k;
f=2*k;
while(f<=n)
{
if(f<n)
{
if(o[f].l<o[f+1].l)
{
f=f+1;
}
}
if(o[t].l<o[f].l)
{
aux=o[t];
o[t]=o[f];
o[f]=aux;
t=f;
f=f*2;
}
else
{
f=n+1;
}
}
};
void up(long long k, long long n)
{
long long t,f;
t=k/2;
f=k;
while(t && o[f].l>o[t].l)
{
aux=o[f];
o[f]=o[t];
o[t]=aux;
f=t;
t=t/2;
}
};
long long extramax()
{
long long v,i;
v=o[1].l;
o[1]=o[n];
n=n-1;
down(1,n);
for(i=1;i<=n;i=i+1)
{
o[i].d=o[i].d+l;
}
return v;
};
void del(long long k, long long &n)
{
o[k]=o[n];
n=n-1;
if(k>1 && o[k].l>o[k/2].l)
{
up(k,n);
}
else
{
down(k,n);
}
};