Mi sono fatto aiutare da un altro al di fuori dal forum, e mi sono accorto di aver seguito un approccio abbastanza diverso da quello ottimale.
La nuova idea risolutiva è:
- Inizializzo C[0] = U[0]
- Itero per il resto dell’Array U
- Controllo se il valore di U che sto prendendo in considerazione é minore dell’ultimo C che ho preso, e per ognuno che é minore diminusco K di 1
- Se non ho preso tutti i valori da prendere, C attuale = U attuale, altrimenti diminuisco K di 1
- stampo C
Questa soluzione fa 100/100, e questo è il codice per essere più comprensibile
#include <iostream>
#include <vector>
using namespace std;
int main() {
freopen("input.txt", "r", stdin);
freopen("output.txt", "w", stdout);
ios_base::sync_with_stdio(false);
cin.tie(0);
int N, K;
cin >> N >> K;
vector<int> U(N);
vector<int> C(N-K);
for (int i = 0; i < N; i++) {
cin >> U[i];
}
int len = N - K - 1;
C[0] = U[0];
int Ci = 0;
int i = 1;
while (i < N) {
while (Ci >= 0 && U[i] < C[Ci] && K > 0) {
Ci--;
K--;
}
if (Ci < len) {
Ci++;
C[Ci] = U[i];
} else {
K--;
}
i++;
}
for (int c: C) {
cout << c << " ";
}
return 0;
}