Cod sursa(job #2320721)

Utilizator AnduRazvanMindrescu Andu AnduRazvan Data 15 ianuarie 2019 01:18:41
Problema Lupul Urias si Rau Scor 88
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.33 kb
#include <fstream>
#include <set>
#include <algorithm>
#include <iostream>
#include <queue>
using namespace std;
ifstream fin("lupu.in");
ofstream fout("lupu.out");

priority_queue < int > myset;
pair <int,int> per[100001];
int main()
{
    int n,x,l,a,b;
    fin>>n>>x>>l;
 for(int i=1;i<=n;i++)
    fin>>per[i].first>>per[i].second;

sort(per,per+n+1);

int r=x%l,poz;

for(int i=1;i<=n;i++)
    {
       // per[i].second=-per[i].second;
        if(per[i].first<=r) {myset.push(per[i].second);poz=i;}
    }

long long sum=myset.top();
//myset.erase(myset.begin());
myset.pop();
int pasi=1;
while(pasi<x/l+1&&poz<n)
{
        //cout<<poz<<" "<<pasi<<"\n";

    for(int i=poz+1;i<=n;i++)
     if(per[i].first<=r+pasi*l) {poz=i;
                                 //myset.insert(per[i].second);
                                 myset.push(per[i].second);
                                }
     else break;

    sum=sum+myset.top();
    //myset.erase(myset.begin());
    myset.pop();
    int save=pasi;

     if(((per[poz+1].first)-r)%l==0) pasi=((per[poz+1].first)-r)/l;
     else  pasi=((per[poz+1].first)-r)/l+1;

     for(int i=1;i<pasi-save&&myset.empty()==0;i++)
     {sum=sum+myset.top();
      //myset.erase(myset.begin());
        myset.pop();
     }

//pasi++;
}
fout<<sum;
    return 0;
}