Potrebno je napisati program koji će pomoći radnicima u restoranu. Program treba da realizuje dva upita:
Ukoliko su najskuplja i najranija porudžbina jedna ista porudžbina, preuzima se samo ona. Ukoliko nema pristiglih porudžbina, upit \(k\) nema efekta. Na kraju obrade svih upita potrebno je ispisati cenu najskuplje porudžbine koja nije obrađena.
Sa standardnog ulaza učitava se broj porudžbina \(n\), a zatim i \(n\) upita u gorenavedenom formatu.
Na standardni izlaz ispisati cenu najskuplje porudžbine koja nije obrađena. U slučaju da nije preostala ni jedna porudžbina, ispisati -1.
7 p 350 p 200 p 500 k p 300 p 250 k
250
Nakon prvog upita \(k\) biće preuzete porudžbine sa cenama 350 (najranija) i 500 (najskuplja).
Nakon drugog upita \(k\) biće preuzete porudžbine sa cenama 200 (najranija) i 300 (najskuplja).
U ovom bloku se opisuje glavno rešenje zadatka.
#include <iostream>
#include <queue>
#include <unordered_set>
using namespace std;
int main()
{
int n; cin >> n;
<int> q;
queue<int> pq;
priority_queue<int> s;
unordered_set
while(n--){
char op; cin >> op;
if(op == 'p'){
int x; cin >> x;
.push(x); pq.push(x); s.insert(x);
q} if(op == 'k'){
while(!pq.empty() && s.find(pq.top()) == s.end())
.pop();
pq
if(!pq.empty()){
int x1 = pq.top(); pq.pop();
.erase(x1);
s}
while(!q.empty() && s.find(q.front()) == s.end())
.pop();
q
if(!q.empty()){
int x2 = q.front(); q.pop();
.erase(x2);
s}
}
}
if (pq.empty()) {
<< -1 << endl;
cout } else {
<< pq.top() << endl;
cout }
return 0;
}