Pagini recente » Cod sursa (job #2251871) | Cod sursa (job #2786594) | Cod sursa (job #1003488) | Cod sursa (job #724692) | Cod sursa (job #1451708)
#include <fstream>
#include <queue>
#include <algorithm>
using namespace std;
ifstream fin ( "lupu.in" );
ofstream fout ( "lupu.out" );
int N, X, L;
long long sol;
pair < int, int > V[100010];
priority_queue < int > H;
int main()
{
fin >> N >> X >> L;
for (int i = 1, d, c; i <= N; i++) {
fin >> d >> c;
V[i].first = ((X - d) / L) + 1; // De cate ori poate alege lupul !
V[i].second = c;
}
sort ( V + 1, V + 1 + N );
int i = N, aux = V[N].first;
while (aux > 0)
{
while ( V[i].first == aux ) {
H.push ( V[i--].second );
}
if ( H.empty() ) {
aux = V[i].first;
}
else {
sol += H.top();
H.pop();
aux --;
}
}
fout << sol << '\n';
fin.close();
fout.close();
return 0;
}