← Subiecte de Titularizare
Titularizare 2020 · subșir strict crescător de termeni pari · metoda tijelor

Căutare binară pe varf[] — simulator pas cu pas

II.1 subprogram Liste Șiruri caractere Matrice Backtracking
II.2 eficient Greedy intervale Reuniune Interclasare LIS LIS tije LCS Kadane Frecvențe Căutare binară
pas 0 / 0
📋 Enunțul problemei

Fișierul titu2020.in conține un șir de cel mult 10⁶ numere naturale distincte din [1, 10⁹]. Se cere numărul maxim de termeni ai unui subșir strict crescător al șirului, format numai din termeni pari. Algoritm eficient ca timp de executare.

Exemplul 1: 28 11 10 13 15 42 24 94 30 80 17 19 2 3 4 6 8 7 → răspuns 4 (ex: 10 24 30 80 sau 2 4 6 8).

Ideea: păstrez doar termenii pari în ordinea din fișier (vectorul par[]), apoi caut cel mai lung subșir strict crescător cu metoda „discuri pe tije": varf[k] = cel mai mic capăt posibil al unui subșir crescător de lungime k. Fiecare termen ajunge cu căutare binară pe prima tijă cu vârful ≥ el. lungMax = câte tije am. Răspunsul e lungMax.

startApasă „Pas înainte". Pornim cu lungMax = 0 (nicio tijă). De aceea la primul termen căutarea binară nici nu rulează — dr = lungMax = 0.

Termenii pari par[] și tijele varf[1..lungMax] st·dr·mij = căutarea binară · lung = lungimea (a câta tijă)

par[i] curent st dr mij (comparat) lung (lungimea = a câta tijă) tijă existentă

Starea algoritmului variabilele din cod

Codul C++ linia activă e evidențiată

metoda tijelor cu căutare binară

    

Algoritmul în limbaj natural pasul curent e evidențiat