Cod sursa(job #911759)
#include<fstream>
#include<set>
#include<algorithm>
using namespace std;
int n,m,k,i,elem;
struct oaie
{
unsigned long long dist,l;
};
oaie a[100002];
unsigned long long int sol,pas;
multiset<int,greater <int> > heap;
bool cmp(oaie a, oaie b)
{
return a.dist<b.dist;
}
int main()
{
ifstream f("lupu.in");
ofstream g("lupu.out");
f>>n>>m>>k;
for(i=1;i<=n;++i)
{
f>>a[i].dist>>a[i].l;
{a[i].dist=(m-a[i].dist)/k+1;
pas=max(pas,a[i].dist);}
}
sort(a+1,a+n+1,cmp);
elem=n;
for(i=pas;i>0;--i)
{
while(elem>0&&a[elem].dist==i)
{
heap.insert(a[elem].l);
--elem;
}
if(heap.size()>0)
{
sol+=*heap.begin();
heap.erase(heap.begin());
}
}
g<<sol;
}