Pagini recente » Cod sursa (job #2726437) | Cod sursa (job #1033016) | Cod sursa (job #886891) | Cod sursa (job #2782960) | Cod sursa (job #1848028)
#include <fstream>
#include <algorithm>
using namespace std;
ifstream fin("lupu.in");
ofstream fout("lupu.out");
struct oaie
{
int d,l;
}a[100005];
int n,x,l,q[100005],k;
bool cmp(oaie a,oaie b)
{
if(a.d!=b.d)
return a.d<b.d;
else
return a.l>b.l;
}
void adauga(int poz)
{
while(poz/2>0&&q[poz/2]>q[poz])
{
swap(q[poz],q[poz/2]);
poz/=2;
}
}
void coboara(int poz)
{
if(2*poz+1<=k)
{
if(q[2*poz+1]<q[2*poz])
{
if(q[2*poz+1]<q[poz])
{
swap(q[2*poz+1],q[poz]);
coboara(2*poz+1);
}
}
else
{
if(q[2*poz]<q[poz])
{
swap(q[2*poz],q[poz]);
coboara(2*poz);
}
}
}
else
if(2*poz<=k)
{
if(q[poz]>q[2*poz])
swap(q[poz],q[2*poz]);
}
}
int main()
{
fin>>n>>x>>l;
for(int i=1;i<=n;i++)
{
k++;
fin>>a[k].d>>a[k].l;
if(a[k].d>x)
k--;
else
a[k].d=(x-a[k].d)/l;
}
n=k;
k=0;
sort(a+1,a+n+1,cmp);
for(int i=1;i<=n;i++)
{
if(a[i].d-k>=0)
{
k++;
q[k]=a[i].l;
adauga(k);
}
else
if(a[i].l>q[1])
{
q[1]=a[i].l;
coboara(1);
}
}
long long sum=0;
for(int i=1;i<=k;i++)
sum+=q[i];
fout<<sum;
return 0;
}