Cod sursa(job #1243229)

Utilizator gapdanPopescu George gapdan Data 15 octombrie 2014 18:10:00
Problema Lupul Urias si Rau Scor 16
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.89 kb
#include<cstdio>
#include<algorithm>
#include<queue>
#define NMAX 100005
using namespace std;
long long d[NMAX],a[NMAX];
priority_queue<long long>q;
long long n,l,dist,lg,i;
long long sum;
struct lup
{
    long long val,ord;
}T[NMAX];
int cmp(lup r,lup p)
{
    if (r.val<p.val) return 0;
    return 1;
}
int main()
{
    freopen("lupu.in","r",stdin);
    freopen("lupu.out","w",stdout);
    scanf("%lld%lld%lld",&n,&dist,&l);
    for (i=1;i<=n;++i)
    {
    scanf("%lld%lld",&d[i],&a[i]);
    if (d[i]<=dist) {T[i].val=(dist-d[i])/l+1,T[i].ord=i;}
    }
    sort(T+1,T+n+1,cmp);
    long long Max=T[1].val,k;
    i=1;
    for (k=Max;k>0;--k)
    {
        while (i<=n && T[i].val==k)
            {
                q.push(a[T[i].ord]);
                ++i;
            }
        if (!q.empty()){sum+=q.top();q.pop();}
    }
    printf("%lld\n",sum);
    return 0;
}