Pagini recente » Cod sursa (job #2378141) | Cod sursa (job #1919291) | Cod sursa (job #2437158) | Cod sursa (job #357446) | Cod sursa (job #3196865)
#include <fstream>
#include <queue>
#include <algorithm>
using namespace std;
const int Vmax = 100001;
struct oaie{
int distOaie;
long long valOaie;
}oi[Vmax];
int n, distLup, adaos;
long long suma;
priority_queue<int> Q;
int main(){
ifstream fin("lupu.in");
ofstream fout("lupu.out");
fin>>n>>distLup>>adaos;
for(int i=1;i<=n;i++){
fin>>oi[i].distOaie;
fin>>oi[i].valOaie;
}
sort(oi + 1, oi + n + 1, [](const oaie &a, const oaie &b){
return a.valOaie > b.valOaie;
});
long long contorDistanta = 0;
for(int i=1;i<=n;i++){
bool ok = 1;
oi[i].distOaie += contorDistanta;
while(!Q.empty() && oi[i].distOaie > distLup){
if(-Q.top() + contorDistanta <= distLup){
int nouTop = -Q.top() + contorDistanta;
Q.pop();
Q.push(-nouTop);
oi[i].distOaie -= contorDistanta;
}
else{
ok=0;
break;
}
}
if(!ok)
continue;
Q.push(-oi[i].distOaie);
suma+=oi[i].valOaie;
contorDistanta+=adaos;
}
fout<<suma;
return 0;
}