Pagini recente » Diferente pentru problema/jungla intre reviziile 22 si 16 | Cod sursa (job #3359021) | Monitorul de evaluare | Monitorul de evaluare | Cod sursa (job #3359026)
#include <bits/stdc++.h>
#define int ll
using namespace std;
using ll = long long;
struct sheep {
int d, v;
};
signed main() {
ifstream cin("lupu.in");
ofstream cout("lupu.out");
cin.tie(0)->sync_with_stdio(0);
int n, x, l; cin >> n >> x >> l;
sheep a[n];
for(int i = 0; i < n; i ++) {
auto &[d, v] = a[i]; cin >> d >> v;
if(d <= x)
d = (x - d) / l;
else
i --, n --;
}
sort(a, a + n, [](sheep a, sheep b){
return a.d > b.d;
});
int last = -2, ans = 0;
priority_queue<int> pq;
for(int i = 0; i < n && a[i].d >= 0; i ++) {
if(last == -2) {
last = a[i].d;
} else while(last > a[i].d && pq.size()) {
ans += pq.top();
pq.pop();
last --;
}
last = a[i].d;
pq.push(a[i].v);
}
while(last > -1 && pq.size()) {
ans += pq.top();
pq.pop();
last --;
}
cout << ans;
}