Desk ordering 50/100 Time out

Non riesco a trovare una soluzione più efficiente di usare un multiset dove verifico se l elemento inserito è maggiore dei due massimi che ho trovato o i due massimi che ho non sono più presenti nel multiset. Qualche hint ? codice

il set è una struttura abbastanza “complessa” per quello che richiede il problema, esiste una struttura più efficiente che ti permetta di avere i due massimi? inoltre, puoi gestire la finestra in cui esegui le operazioni in modo piu’ semplce, senza usare code

Hmm priority queue ? Poi non saprei come gestirmela non potendo eliminare determinati elementi, e ricaricarla ogni volta non credo sia efficiente.
Le struttre che conosco che mi danno un ordine sono : set, multiest, priority queue e la map .
Potrei fare un iserimento ordinato ma se il mutliset non è efficiente in questo caso, non è la soluzione ideale.
Se trovassi i due massimi ogni volta con una ricerca sequenziale è anche peggio.
Questo problema è molto più complesso di quanto potessi aspettarmi, ci devo ragionare meglio.

Prova a trovare un modo per trovare il massimo/minimo in intervalli contigui in complessità lineare.

2 Mi Piace

A parte il cambio di strategia che ti viene consigliato sopra, ti vorrei far notare che stai passando alla funzione massimi un multiset per valore, il che significa che ogni volta vai a copiare tutta la struttura dati e questo potrebbe costare parecchio.
Già passandolo per riferimento dovresti stare dentro a tutti subtask tranne l’ultimo.

Ho spostato il multiset in globale e non è cambiato nulla, ho pure provato a passare per riferimento. Credo si faccia cosi per riferimento void massimi (int &x , int &y, multiset <int> &vet) <.<
Sai che ho avuto sempre questo dubbio e per questo di solito quando uso le strutture dati in molte funzioni le dichiaro in globale ? xd

nella priority queue della stl non puoi eliminare per chiave, ma devi per forza usare quella della stl?

1 Mi Piace

Grazie a tutti per gli aiuti, ho risolto ^-^

1 Mi Piace