Mai intai trebuie sa te autentifici.
Cod sursa(job #2291718)
Utilizator | Data | 28 noiembrie 2018 15:41:47 | |
---|---|---|---|
Problema | Lupul Urias si Rau | Scor | 32 |
Compilator | cpp-64 | Status | done |
Runda | Arhiva de probleme | Marime | 1.02 kb |
#include <fstream>
#include <set>
#include <algorithm>
#include <iostream>
using namespace std;
ifstream fin("lupu.in");
ofstream fout("lupu.out");
multiset < long long > myset;
pair <long long, long long> per[100001];
int main()
{
long long n,x,l,a,b;
fin>>n>>x>>l;
for(long long i=1;i<=n;i++)
fin>>per[i].first>>per[i].second;
sort(per,per+n+1);
long long r=x%l,poz;
for(long long i=1;i<=n;i++)
{
per[i].second=-per[i].second;
if(per[i].first<=r) {myset.insert(per[i].second);poz=i;}
}
long long sum=-*myset.begin();
myset.erase(myset.begin());
long long pasi=1;
while(pasi<x/l+1&&poz<n)
{
cout<<poz<<" "<<pasi<<"\n";
for(long long i=poz+1;i<=n;i++)
if(per[i].first<=r+pasi*l) {poz=i;myset.insert(per[i].second);}
else break;
sum=sum-*myset.begin();
myset.erase(myset.begin());
if(((per[poz+1].first)-r)%l==0) pasi=((per[poz+1].first)-r)/l;
else pasi=((per[poz+1].first)-r)/l+1;
}
fout<<sum;
return 0;
}