Pagini recente » Cod sursa (job #2456030) | Cod sursa (job #906079) | Cod sursa (job #3156419) | Cod sursa (job #1964157) | Cod sursa (job #1845123)
#include <cstdio>
#include <set>
#include <algorithm>
using namespace std;
struct oita {
int lana,strat;
};
oita oaie[100005];
int n,i,k,l,distanta,lana,nr;
long long totalLana;
struct comp {
inline bool operator()(const int &a,const int &b) {
return (a>b);
}
};
multiset <int,comp> heap;
bool cmp(oita a,oita b) {
return (a.strat>b.strat);
}
int main() {
freopen("lupu.in","r",stdin);
freopen("lupu.out","w",stdout);
scanf("%d %d %d",&n,&l,&k);
for (i=1;i<=n;i++) {
scanf("%d %d",&distanta,&lana);
if(l>=distanta){
nr++;
oaie[nr].lana=lana;
oaie[nr].strat = (l-distanta)/k;
}
}
n=nr;
sort(oaie+1,oaie+n+1,cmp);
heap.insert(oaie[1].lana);
for (i=2;i<=n;i++) {
if (oaie[i].strat == oaie[i-1].strat)
heap.insert(oaie[i].lana);
else {
int x = oaie[i-1].strat - oaie[i].strat;
for (int j=1;j<=x;j++) {
if (heap.empty()) break;
totalLana += (long long)*heap.begin();
heap.erase(heap.begin());
}
heap.insert(oaie[i].lana);
}
}
if (oaie[n].strat == 0 && !heap.empty()) totalLana += (long long)*heap.begin();
printf("%lld\n",totalLana);
return 0;
}