- Es gibt N Container, die in einer einzigen Reihe angeordnet sind.
- Jeder Container hat eine Größe Ai (1 ≤ Ai ≤ M).
- Der Roboter kann einen Container auswählen und ihn in einen größeren Container rechts davon platzieren.
- Ein Container, der bereits einen anderen enthält, kann nicht erneut verwendet werden.
- Ich muss die Gesamtzahl der Roboteroperationen (Verschachtelungen) zählen.
- Erste Zeile: zwei Ganzzahlen M (maximale Containergröße) und N (Anzahl der Container) />Beispieleingabe:
Beispielausgabe:
Code: Select all
5 10 2 2 1 4 3 2 5 4 2 3Erklärung:Code: Select all
4
Der Roboter schachtelt Container in den ersten verfügbaren größeren Container rechts von ihm. - Nachdem 4 Schachtelungen durchgeführt wurden, können keine weiteren Container mehr geschachtelt werden.
Ich habe versucht, einen Vektor mit Upper_bound und Lower_bound in umgekehrter Reihenfolge zu verwenden:
Code: Select all
for(auto it = arr.rbegin(); it != arr.rend();it++){
int val = *it;
auto idx = std::upper_bound(S.begin(), S.end(), val);
if (idx != S.end()) {
ops++;
S.erase(idx);
} else {
S.insert(std::lower_bound(S.begin(), S.end(), val), val);
}
}
Frage:
- Ist dieser Ansatz korrekt und effizient?
- Wie lässt sich dies am besten in C++ implementieren, um N bis zu 20.000 und M bis zu 1.000 zu verarbeiten?
Mobile version