Pagini recente » Cod sursa (job #2344771) | Cod sursa (job #1225570) | Cod sursa (job #1024542) | Cod sursa (job #3032099) | Cod sursa (job #1319372)
#include <cstdio>
#include <algorithm>
#include <vector>
#include <cassert>
#include <queue>
#define D first
#define L second
using namespace std;
FILE *f,*g;
vector < pair<int,int> >v;
priority_queue <int> H;
int n,x,l,i,sol=0,cn;
int main()
{
f=fopen("lupu.in","r");
g=fopen("lupu.out","w");
fscanf(f,"%d%d%d",&n,&x,&l);
v.resize(n);
assert(l != 0);
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 += H.top();
H.pop();
cn--;
i++;
}
else
{
cn = v[i].D;
i++;
}
}
while (cn > -1 && H.size()>0)
{
cn--;
sol+=H.top();
H.pop();
}
fprintf(g,"%d",sol);
return 0;
}