Cod sursa(job #1536597)

Utilizator paunmatei7FMI Paun Matei paunmatei7 Data 26 noiembrie 2015 14:01:36
Problema Lupul Urias si Rau Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.85 kb
#include <cstdio>
#include <algorithm>
#include <vector>
#include <queue>

#define d first
#define b second

#define NMAX 100007

using namespace std;

pair < long long, long long > a[NMAX];
vector < long long > v[1 << 20 + 7];
priority_queue<long long> q;
long long n, x, l;

int main(){
    freopen("lupu.in", "r", stdin);
    freopen("lupu.out", "w", stdout);
    scanf("%lld %lld %lld", &n, &x, &l);
    for(int i = 1; i <= n; ++i){
        scanf("%lld %lld", &a[i].d, &a[i].b);
        if(x >= a[i].d)
            v[(x - a[i].d) / l + 1].push_back(i);
    }
    long long Ans = 0;
    for(int i = n; i >= 1; --i){
        for(int j = 0; j < v[i].size(); ++j)
            q.push(a[v[i][j]].b);
        if(! q.empty()){
            Ans += q.top();
            q.pop();
        }
    }
    printf("%lld", Ans);
    return 0;
}