Pagini recente » Cod sursa (job #2876088) | Cod sursa (job #3268111) | Cod sursa (job #2649878) | Cod sursa (job #368629) | Cod sursa (job #2547292)
#include <bits/stdc++.h>
#define ll long long
using namespace std;
ifstream in("lupu.in");
ofstream out("lupu.out");
ll n,x,l;
pair<ll,ll> oi[100005],t[100005];
int main()
{ll i,j;
in >> n >> x >> l;
for (i = 1; i <= n; i++){
in >> oi[i].first >> oi[i].second; ///distanta si cantitatea
t[i] = { (x - oi[i].first) / l + 1, oi[i].second}; /// numarul de ture si cnt
}
// for (i = 1; i <= n; i++) cout << t[i].first << " cnt = " << t[i].second << "\n";
sort(t + 1 , t + 1 + n);
priority_queue <ll> q;
ll cr,st;
long long sol = 0;
for (i = n; i >= 1; i--)
{
if (!q.empty())
{
cr = t[i + 1].first - t[i].first;
while(!q.empty() && cr--){
sol += q.top();
q.pop();
}
}
st = t[i].first;
while(st == t[i].first)
{
q.push(t[i].second);
st--;
}
}
cr = t[1].first;
while(!q.empty() && cr--){
sol += q.top();
q.pop();
}
out << sol << "\n";
out.close();
in.close();
return 0;
}
/**
t este timpul dupa care o sa iasa si cantitatea de lana
Le sortam descrescator si facem maximul
*/