// kolejka priorytetowa odwrotna tzn. minimalny koszt biletu na topie (koszt * -1)
// w kolejce zapamiertuje dla kazdej kasy: koszt, ile biletów max biletów mozna kupic
// zaczynam od konca trasy i kupuje bilety które mogłem kupic wczesniej od najtanszych zgodnie z kosztem w kolejce, jednak nie kupuje wiecej niz potrzebuje
priority_queue< pair<int, int>> q;// kolejna 2 elementów: koszt najmniejszy, ile biletów max biletów mozna kupic
int ile_kupilem =0;// ile kupiłem biletów w kasie do tej pory
cin>> n;
// wszystkie kasy do kolejki (kolejka typu min, czyli koszt * -1)
for(int i =0; i < n;++i){
int koszt, licza_bil;
int nr_kasy = i+1;
cin>> koszt >> licza_bil;
q.push(make_pair(koszt*(-1), licza_bil));
}
// zaczynam od konca trasy i kupuje bilety które mogłem kupic wczesniej od najtanszych zgodnie z kosztem w kolejce
for(int i = n+1; i>0;--i){
pair <int, int> aktualna_kasa = q.top();
int koszt = aktualna_kasa.first;
int licza_bil = aktualna_kasa.second;
int ile_kupic = min(licza_bil,n-ile_kupilem);// tyle najwiecej mógłbym kupic od danej kasy do konca trasy, jednak nie więcej niz jest w danej kasie (liczba_bil)
ile_kupilem += ile_kupic;
wynik += ile_kupic * koszt;// na końcu zmienię -1
q.pop();//usuwam kase z gory kolejki więcej biletów w tej kasie nie mogę kupić
cout<<" ile_kupic: "<< ile_kupic <<" koszt: "<< wynik << endl;