Cod sursa(job #1456667)

Utilizator BLz0rDospra Cristian BLz0r Data 1 iulie 2015 16:43:44
Problema Lupul Urias si Rau Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.9 kb
#include <cstdio>
#include <algorithm>
#include <queue>
using namespace std;

#define Nmax 100002
#define dist first
#define lana second

FILE *f = fopen ( "lupu.in", "r" );
FILE *g = fopen ( "lupu.out", "w" );

priority_queue < int > Heap;
pair < int, int > Oaie[Nmax];

int main(){

    int N, X, L;
    long long sol = 0;

    fscanf ( f, "%d%d%d", &N, &X, &L );

    for ( int i = 1; i <= N; ++i )
        fscanf ( f, "%d%d", &Oaie[i].dist, &Oaie[i].lana );

    sort ( Oaie + 1, Oaie + N + 1 );

    int ind = 1, pas = ( X - Oaie[1].dist ) / L ;

    while ( ind <= N && pas >= 0 ){
        while ( ( X - Oaie[ind].dist ) / L == pas ){
            Heap.push ( Oaie[ind].lana );
            ind++;
        }
        if ( !Heap.empty() ){
            sol += Heap.top();
            Heap.pop();
        }
        pas--;
    }

    fprintf ( g, "%lld", sol );

    return 0;
}