Cod sursa(job #1051144)

Utilizator a96tudorAvram Tudor a96tudor Data 9 decembrie 2013 19:15:30
Problema Lupul Urias si Rau Scor 88
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.19 kb
#include<cstdio>
#include<vector>
#include<algorithm>
#include<set>

#define mp make_pair
#define pb push_back
#define ins insert
using namespace std;

multiset <int> H;
vector < pair<int,int> > T;

inline bool cmp(pair <int,int> x,pair <int,int> y)
{return x.first>y.first;}

inline void Greedy()
{
    int T_Max=(*T.begin()).first;
    long long Sol=0;
    vector < pair<int,int> > :: iterator it=T.begin();
    vector < pair<int,int> > :: iterator lim=T.end();
    for (int k=T_Max;k>=1;--k)
    {
        while((*it).first==k && it!=lim)
        {
            H.ins((*it).second);
            ++it;
        }
        multiset <int> ::iterator poz=H.end();
        poz--;
        Sol+=(long long)(*poz);
        H.erase(poz);
    }
    printf("%lld\n",Sol);
}

inline void Load_Data()
{
    int N,K,X,d,c,t;
    scanf("%d%d%d",&N,&K,&X);
    for (int i=1;i<=N;++i)
    {
        scanf("%d%d",&d,&c);
        if (K>=d) t=(K-d)/X+1, T.pb(mp(t,c));
    }
    sort(T.begin(),T.end(),cmp);
}

int main()
{
    freopen("lupu.in","r",stdin);
    freopen("lupu.out","w",stdout);
    Load_Data();
    Greedy();
    fclose(stdin);
    fclose(stdout);
    return 0;
}