Pagini recente » Cod sursa (job #274713) | Cod sursa (job #2647847) | Cod sursa (job #1968974) | Cod sursa (job #2885241) | Cod sursa (job #1319375)
#include <cstdio>
#include <algorithm>
#include <vector>
#include <cassert>
#include <queue>
#define D first
#define L second
using namespace std;
FILE *f,*g;
#define ll (long long)
vector < pair<int,int> >v;
priority_queue <int> H;
int n,x,l,i,cn;
long long sol=0;
int main()
{
f=fopen("lupu.in","r");
g=fopen("lupu.out","w");
fscanf(f,"%d%d%d",&n,&x,&l);
v.resize(n);
for (i=0;i<n;i++)
{
fscanf(f,"%d%d",&v[i].D,&v[i].L);
if (x<v[i].D)
v[i].D = -2;
else
v[i].D = (x-v[i].D)/l;
}
sort(v.begin(),v.end());
for (i=n-1,cn = v[n-1].D;i>=0 && cn>-1;i--)
{
if (cn == v[i].D)
{
H.push(v[i].L);
continue;
}
if (H.size() > 0)
{
sol =ll sol + H.top();
H.pop();
cn--;
i++;
}
else
{
cn = v[i].D;
i++;
}
}
while (cn > -1 && H.size()>0)
{
cn--;
sol=ll sol+H.top();
H.pop();
}
fprintf(g,"%lld",sol);
return 0;
}