Cod sursa(job #1319375)

Utilizator costyv87Vlad Costin costyv87 Data 16 ianuarie 2015 22:02:02
Problema Lupul Urias si Rau Scor 100
Compilator cpp Status done
Runda Teme Pregatire ACM Unibuc 2014, Anul I Marime 1.16 kb
#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;
}