Pe scurt
O secvență a unui șir conține elemente de pe poziții consecutive. În [2,4,6], [2,4] este secvență, iar [2,6] nu este. Un subșir păstrează ordinea din șirul inițial, dar poate sări peste poziții; [2,6] este subșir. Pentru a calcula repede suma unei secvențe, folosim sumele parțiale. Dacă valorile sunt 2, 4, 6, sumele parțiale sunt 2, 6, 12, iar suma ultimelor două valori este 12−2=10.
În detaliu
O secvență (subsecvență) a unui vector este formată din elemente aflate pe poziții consecutive, de la la , cu ambele capete incluse; are elemente. Un subșir păstrează ordinea elementelor din șirul inițial, dar poate sări peste poziții. Pentru , este secvență și subșir, iar este subșir, dar nu secvență. Pozițiile se numerotează de la 0 sau de la 1, iar convenția se precizează: în exemplele de mai jos indicii pornesc de la 0, dacă nu se spune altfel.
Suma unei secvențe se calculează printr-un ciclu de la la , cu cost proporțional cu lungimea secvenței. Dacă se cer multe sume pe același vector, se construiește o dată vectorul sumelor parțiale (al prefixelor): și pentru indici de la 1. Suma secvenței cu pozițiile de la la (indici de la 1) este , adică o scădere, în timp constant.
Exemplul 1 — suma unei secvențe. În vectorul (indici de la 0) secvența cu și conține elementele 1 și 4, cu suma 5.
#include <iostream>
using namespace std;
int main() {
int v[] = {3, 1, 4, 2};
int l = 1, r = 2, suma = 0;
for (int i = l; i <= r; ++i)
suma += v[i];
cout << suma;
return 0;
}
Se afișează 5. Secvența are elemente. Dacă ciclul ar avea condiția i < r, elementul de pe poziția ar lipsi și suma ar fi 1.
Exemplul 2 — sume parțiale. Pentru , cu indici de la 1, sumele parțiale sunt . Suma pozițiilor 2–3 (elementele 1 și 4) este , iar suma întregului vector este . Fiecare întrebare nouă despre suma unei secvențe costă acum o singură scădere.
int pre[5] = {0};
for (int i = 0; i < 4; ++i)
pre[i + 1] = pre[i] + v[i];
cout << pre[3] - pre[1] << ' ' << pre[4];
Secvența afișează 5 10. Vectorul pre are cu un element mai mult decât v, iar pre[0] este 0, ca să funcționeze și secvențele care încep de la primul element.
Exemplul 3 — cea mai lungă secvență de elemente egale. În vectorul se numără lungimea secvenței curente: crește când elementul este egal cu cel dinaintea lui și revine la 1 altfel. Lungimile succesive sunt 1, 2, 1, 2, 3, 1, 1, 2, iar maximul lor este 3, pentru secvența . Valoarea 2 apare de 5 ori în vector, dar secvența lor maximă are lungimea 3, pentru că elementul 3 le întrerupe.
int best = 1, cur = 1;
for (int i = 1; i < n; ++i) {
if (y[i] == y[i - 1]) ++cur; else cur = 1;
if (cur > best) best = cur;
}
Secvența lasă best = 3. Algoritmul parcurge vectorul o singură dată, deci timpul este proporțional cu .
Exemplul 4 — câte secvențe și câte subșiruri are un vector. Un vector cu elemente are secvențe de lungime 1, de lungime 2 și așa mai departe, până la una de lungime , deci secvențe. Pentru sunt . Subșirurile nevide corespund submulțimilor nevide de poziții, deci sunt . Diferența, 5, reprezintă subșirurile care sar peste cel puțin o poziție: , , , și . Numărul secvențelor crește pătratic, iar cel al subșirurilor exponențial; de aceea un program care ar încerca toate subșirurile unui vector de 40 de elemente nu mai este practic.
Greșeli frecvente
- Greșit: este o secvență a lui .Corect: este subșir; o secvență are poziții consecutive.
- Greșit: secvența de la la are elemente.Corect: are elemente când ambele capete sunt incluse.
- Greșit: sumele parțiale se recalculează pentru fiecare întrebare.Corect: se construiesc o dată, apoi fiecare suma se obține prin diferența a două prefixe.
Testează-te pe această lecție
Lecția o citești aici, fără cont. Testele pe lecții și capitole sunt în cont, cu grile originale Didaxis și explicația fiecăreia: gratuit 10 grile pe zi, fără limită cu Premium, 49 de lei pe lună pentru fiecare copil.
Înainte și după
Surse și referințe
Redactare proprie, conform programei:
- OMECI 5099/2009, anexa 5, Informatică, p. 4–5, clasa X; plan de încadrare: OMECI 3410/2009, anexa 1, p. PDF 1–14; forum.isj.hd.edu.ro; filiera tehnologică: OMECI 3412/2009, anexa 2, tabel X, legislatie.just.ro
- OMECI 5099/2009, anexa 5, Informatică, p. 4–5, clasa X; rocnee.eu
- UNSTPB, Regulament admitere licență 2026, Anexa II-1.2 p. Anx II-14 și Anexa XI-3 p. Anx XI-6–7 (PDF p. 64, 120–121); admitere.pub.ro
- OMECTS 4800/2010, anexa 2, Informatică, p. 3 și 6; aplicabilitatea 2027: OMEC 5211/2026, art. 3 alin. (10); edu.ro
- OMECTS 4800/2010, anexa 2, Informatică, p. 3–4; edu.ro
- OMECTS 4800/2010, anexa 2, Informatică, p. 5–6; edu.ro
Documente consultate
- Programa școlară de informatică, clasa a X-a (OMECI 5099/2009, anexa 5), CNCE; rocnee.eu
- Programa școlară de informatică, clasa a IX-a, matematică-informatică (OMEC 6930/2025, anexa 42); rocnee.eu
- Programa de bacalaureat la informatică, matematică-informatică (anexa 2 la OMECTS 4800/2010), Ministerul Educației, p. 3–4; edu.ro
- Subiectele și baremele Bacalaureatului 2026; subiecte2026.edu.ro
Desene: Redactare proprie (desen original), conform Programa școlară de informatică, clasa a X-a (OMECI 5099/2009, anexa 5), CNCE; rocnee.eu
