Cod sursa(job #1969701)

Utilizator CodrutLemeniCodrut Lemeni CodrutLemeni Data 18 aprilie 2017 16:38:22
Problema Lupul Urias si Rau Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.13 kb
#include <iostream>
#include <stdio.h>
#include <stdlib.h>
#include <algorithm>
#include <queue>

using namespace std;

const int N = 1e5 + 5 ;
int noOi , step , jump ;

struct Oaie{
    int val , time ;
};

Oaie v [ N ];

bool cmp ( Oaie a , Oaie b ){
    return a.time > b.time ;

}

priority_queue < int > que ;

int main(){
    int i , dist , wool ;

    freopen("lupu.in","r",stdin);
    freopen("lupu.out","w",stdout);

    scanf("%d %d %d",&noOi , &jump , &step );


    for ( i = 0 ; i < noOi ; i++ ){
        scanf("%d%d",  &dist , &wool );
        v [ i ].val = wool ;
        v [ i ].time = ( jump - dist )/step ;
        if ( dist > jump ){
            v [ i ].time = -1 ;
        }
    }

    sort ( v , v + noOi , cmp );

    int vcr = 0 ;
    long long sol = 0 ;
    for ( i = v [ 0 ].time ; i >= 0 ; i-- ){
        while ( vcr < noOi && v [ vcr ].time ==  i  ){
            que.push( v [ vcr ].val );
            vcr ++ ;
        }

        if ( !que.empty() ){
            sol += 1LL * que.top();
            que.pop();
        }

    }

    printf("%lld",sol);

    return 0;
}