Pagini recente » Cod sursa (job #262263) | Cod sursa (job #85489) | Cod sursa (job #1017409) | Cod sursa (job #2158658) | Cod sursa (job #2709485)
#include <bits/stdc++.h>
using namespace std;
map<int, vector<int> > oi;
vector<int> sol;
bool heapcmp(int &a, int &b)
{
return a>b;
}
int main()
{
freopen("lupu.in","r",stdin);
freopen("lupu.out","w",stdout);
int n,x,l,s=0;
int imx=-1,imn=INT_MAX;
cin>>n>>x>>l;
for(int i=0;i<n;i++)
{
int d,v;
cin>>d>>v;
if(d<x)
{
oi[(x-d)/l].push_back(v);
if(imx<(x-d)/l) imx=(x-d)/l;
if(imn>(x-d)/l) imn=(x-d)/l;
}
}
for(int i=imn;i<=imx;i++)
{
sort(oi[i].begin(),oi[i].end());
int jbegin=0;
if(oi[i].size()>i) jbegin=oi[i].size()-i-1;
for(int j=jbegin;j<oi[i].size();j++)
{
if(sol.size()<=i)
{
sol.push_back(oi[i][j]);
push_heap(sol.begin(),sol.end(),heapcmp);
}
else if (sol.front()<oi[i][j])
{
pop_heap(sol.begin(),sol.end(),heapcmp);
sol.pop_back();
sol.push_back(oi[i][j]);
push_heap(sol.begin(),sol.end(),heapcmp);
}
}
}
for(int i=0;i<sol.size();i++) {s+=sol[i];}
cout<<s;
return 0;
}