Pagini recente » Monitorul de evaluare | Cod sursa (job #1957502) | Cod sursa (job #1317185) | Cod sursa (job #2810275) | Cod sursa (job #3343177)
#include <iostream>
#include <fstream>
#include <algorithm>
#include <queue>
using namespace std;
ifstream fin("lupu.in");
ofstream fout("lupu.out");
struct elem{
long long nrTure;
long long pufosenie;
elem(long long turn ,int puf):nrTure(turn),pufosenie(puf){};
};
long long calcTure(long long &distMax,long long &dini,long long &lung){
return (distMax-dini)/lung+1;//tura maxima la care poate sa l e ia ,l.
}
bool cmp(const elem &a,const elem &b){
return (a.nrTure<b.nrTure||(a.nrTure==b.nrTure && a.pufosenie>=b.pufosenie));
}
struct alese{
bool operator ()(long long a,long long b){
return a<b;
}
};
int main()
{
long long n,distMax,l;
fin>>n>>distMax>>l;
long long dIni,puf;
vector<elem>v;
for(int i=0;i<n;++i){
fin>>dIni>>puf;
if(dIni<=distMax){
v.push_back(elem(calcTure(distMax,dIni,l),puf));
}
}
// cout<<endl<<endl;
sort(v.begin(),v.end(),cmp);
priority_queue<long long,vector<long long>,alese>pq;//ce oi am ales
pq.push(v[0].pufosenie);
long long available=1;
long long luate=1;
for(int i=1;i<v.size();++i){
if(v[i].nrTure!=v[i-1].nrTure){
available++;
}
if(available>luate){
pq.push(v[i].pufosenie);
++luate;
}
else if(v[i].pufosenie>pq.top()){
pq.pop();
pq.push(v[i].pufosenie);
}
}
long long sum=0;
while(!pq.empty()){
sum+=pq.top();
pq.pop();
}
fout<<sum;
return 0;
}