Cod sursa(job #1823891)

Utilizator silkMarin Dragos silk Data 6 decembrie 2016 22:56:00
Problema Lupul Urias si Rau Scor 28
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.78 kb
#include <cstdio>
#include <algorithm>
#include <queue>
#define NMax 100000
using namespace std;

priority_queue<int> Q;
pair<int, int> v[NMax+1];

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

    int i,j,N,M,X,L,a,b;
    long long ans = 0;

    scanf("%d %d %d",&N,&X,&L);
    for(M = 0, i = 1; i <= N; ++i)
    {
        scanf("%d %d",&a,&b);
        if(a <= X) v[++M] = make_pair(a,b);
    }
    N = M;
    sort(v+1,v+N+1);

    for(a = 1, i = N; i >= 1; ++a)
    {
        for(j = i; j >= 1 && v[j].first+a*L>X; --j) Q.push( v[j].second );
        if( Q.empty() ) Q.push( v[j--].second );
        ans = ans + Q.top();
        while( !Q.empty() ) Q.pop();

        i = j;
    }

    printf("%lld\n",ans);



return 0;
}