Cod sursa(job #2392856)

Utilizator cezar.plescaCezar Plesca cezar.plesca Data 30 martie 2019 15:18:48
Problema Lupul Urias si Rau Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.38 kb
#include<set>
#include<vector>
#include<algorithm>

using namespace std;

int N,X,L;

struct Cmp
{
    bool operator ()(const pair<int,int> &a, const pair<int,int> &b)
    {
		if(a.first == b.first)
			return a.second > b.second;
		return a.first > b.first;
    }
};

struct less_than_key
{
    inline bool operator() (const pair<int,int> &a, const pair<int,int> &b)
    {
        if(a.first == b.first)
			return a.second > b.second;
		return a.first > b.first;
    }
};

//multiset<pair<int,int>,Cmp> oite;
vector<pair<int,int>> oite;

long long blana(){
	//multiset<pair<int,int>,Cmp>::iterator it;
	//multiset<pair<int,int>,Cmp>::reverse_iterator rit;
	vector<pair<int,int>>::iterator it;
	long long B=0;

	while(!oite.empty()){
		it=oite.begin();
		if((*it).second>X){
			oite.erase(it);
			continue;
		}
		else{
			B=B+(*it).first;
			oite.erase(it);
		}
		for(it=oite.begin(); it!=oite.end(); it++){
			(*it).second+=L;
		}
	}
	
	return B;
}

int main(){

	freopen("lupu.in","r",stdin);
	freopen("lupu.out","w",stdout);
	
	scanf("%d %d %d",&N,&X,&L);

	int d,v;
    for (int i = 0; i < N; i++) {
        scanf("%d %d",&d,&v);
		if(d<=X)
			//oite.insert(make_pair(v,d));
			oite.push_back(make_pair(v,d));
	}

	sort(oite.begin(),oite.end(),less_than_key());
	long long result=blana();
	printf("%lld\n",result);

    return 0;
}