Pagini recente » Cod sursa (job #3039188) | Cod sursa (job #2815517) | Cod sursa (job #2530183) | Cod sursa (job #2141662) | Cod sursa (job #2999169)
#include<fstream>
#include<vector>
#include<queue>
#include<algorithm>
using namespace std;
ifstream cin("lupu.in");
ofstream cout("lupu.out");
struct oaie
{
int dist,lana,last;
};
vector<oaie> oi;
bool cmp(oaie &a,oaie &b)
{
return a.last > b.last;
}
int main()
{
int n,x,l; cin >> n >> x >> l;
oi.resize(n + 1);
for(int i = 1; i <= n ; i++)
{
cin >> oi[i].dist >> oi[i].lana;
if(oi[i].dist > x) oi[i].last = -1;
else
{
int c = x - oi[i].dist;
oi[i].last = c / l; oi[i].last++;
}
}
sort(oi.begin() + 1,oi.begin() + n + 1,cmp);
priority_queue<int> pq; long long ans = 0;
int now = 1;
while(now <= n)
{
int mut = now; if(oi[now].last == -1) break;
while(oi[now].last == oi[mut].last && mut <= n)
{
pq.push(oi[mut].lana);
mut++;
}
if(mut == n + 1)
{
while(oi[now].last-- && !pq.empty())
{
ans += pq.top();
pq.pop();
}
break;
}
int am = oi[now].last - max(0,oi[mut].last);
while(am && !pq.empty())
{
ans += pq.top(); pq.pop();
am--;
}
now = mut;
}
cout << ans;
}