Contact și feedback

Nu obții 100 de puncte sau ai nelămuriri în privința problemelor? Scrie-mi pe Instagram.


Ai găsit o greșeală, vrei să raportezi un utilizator sau vrei să comunici altceva? Folosește formularul de contact.


Vrei să ne transmiți o părere despre platformă? Folosește formularul de feedback.

Shortcuturi

Folosește următoarele shortcuturi pentru a naviga mai ușor pe platformă.

Generale

Meniu shortcuturi?
Căutare probleme sau utilizatori/
Navigare printre rezultatele căutării↑, ↓
Meniu de contact și feedbackCTRL + Shift + F
Ieșire din meniuriEsc

Editor probleme

Setări editorCTRL + Shift + S
Schimbare stil editorCTRL + Shift + E
Șabloane de codCTRL + Shift + 1/2/3
Golire editorCTRL + Shift + 4

Cea mai lungă secvență de elemente crescătoare în C++

În această lecție abordăm o aplicație tipică pentru secvențele dintr-un șir.

Dându-se un șir de numere, să se determine cea mai lungă secvență de elemente consecutive, cu valori strict crescătoare.

Exemplu: Pentru șirul [1, 6, 2, 3, 9, 11, 9, 10], secvența de lungime maximă cu elemente crescătoare este [2, 3, 9, 11], care începe de pe poziția 3 și se termină pe poziția 6.

Explicarea algoritmului

Vom ține contoare pentru secvența maximă până într-un punct curent, precum și contoare pentru secvența curentă. Dacă elementul curent este mai mare decât elementul anterior, atunci incrementăm lungimea secvenței curente. Altfel, formăm o nouă secvență de lungime 1, dar nu înainte de a verifica dacă secvența este mai mare decât cea maximă până în acel punct.

Rezolvare în C++

Iată rezolvarea problemei:

#include <iostream>

using namespace std;

int main()
{
    //Declarăm și citim valorile
    int n, a[101];
    cin >> n;
    for(int i = 1; i <= n; i++) {
        cin >> a[i];
    }

    //Căutăm secvența cu elemente crescătoare
    int startMax = 0, lungMax = 0, startCrt = 1, lungCrt = 0;
    for(int i = 1; i <= n; i++) {
        if(a[i] > a[i - 1]) {
            lungCrt++;
        } else {
            if(lungCrt > lungMax) { //Verificăm dacă secvența curentă este maximă
                startMax = startCrt;
                lungMax = lungCrt - 1;
            }
            startCrt = i;
            lungCrt = 1;
        }
    }

    //Afișăm secvența maximă
    for(int i = startMax; i <= startMax + lungMax; i++) {
        cout << a[i] << " ";
    }
    return 0;
}

Obține medalia mult dorită. Devino As la olimpiadă.

Curs complet de olimpiadă, pregătit de olimpici de la Oxford și TU Delft.

Cuprinsul lecției

Se încarcă…

Citește și

Indicatorul lui Euler în C++Vectorii în C++: citire și afișareRidicarea la putere în timp logaritmic în C++. Exponențiere rapidăAl N-lea termen Fibonacci în C++Verifică dacă un caracter este cifră în C++Oglinditul recursiv al unui număr în C++Verificare dacă un număr este palindrom în C++Funcții predefinite în C++ (matematice, șiruri de caractere)Instrucțiunea continue (structuri repetitive)Valoarea absolută (modulul) unui număr în C++Cum să citești și să afișezi în fișiere în C++Interschimbarea a două variabile în C++ (3 metode)CMMDC recursiv a două numere naturale în C++Transformarea unui număr din baza 2 în baza 10 în C++Matrice Fibonacci - al n-lea termen Fibonacci în timp logaritmicNumărul de cifre ale factorialului unui numărInstrucțiunea for (structuri repetitive)Aria unui triunghi folosind coordonatele acestora în C++Verifică dacă un număr aparține șirului Fibonacci în C++Ce înseamnă variabilă globală și locală în C++?Șirul lui Fibonacci în C++Do while vs while în C++ - Care e diferența?Indicatorul lui Euler al numerelor de la 1 la N (Folosind ciurul lui Eratostene)Numărul de apariții al unui număr într-un vector în C++Matrice pătratice în C++. Diagonala principală și secundarăInstrucțiunea de decizie în C++: if, else, switch, caseGenerarea șirului Fibonacci generalizat în C++Maximul și minimul a două valori în C++Verifică dacă un număr dat este o putere de 2 în C++Matrice în C++. Declararea și parcurgerea tablourilor bidimensionaleMaximul și minimul a n valori în C++Cum să calculezi instant 2 la puterea N în C++Numărul de divizori al numerelor de la 1 la N (Folosind ciurul lui Eratostene)Numărul minim de peroane pentru o gară în C++Codul ASCII (tabel complet)Tipuri de date în C++: numere întregi, reale, caractere și alteleCel mai mic/mare divizor prim al numerelor de la 1 la N (Folosind ciurul lui Eratostene)Maximul și minimul unui vector în C++Instrucțiunea do while (structuri repetitive)Aflarea sumei primelor N sume GaussAria și circumferința unui cerc în C++Ce este o variabilă unsigned în C++?Transformarea unei litere mici în literă mare în C++Tipul struct în C++. Ce sunt structurile de date neomogeneRadicalul unui număr în C++ (rădăcina pătrată)Numărul permutărilor în C++ (formula permutărilor)De ce cer unele probleme răspunsul modulo 666013 sau modulo 1.000.000.007?Inversarea unui vector în C++Vectori de frecvență (de apariții) în C++Materia pentru olimpiada de informatică - tot ce trebuie să știiCalculul combinărilor de n luate câte k (nCk) în C++Cum să afișezi partea întreagă a unui număr real în C++Cifra de control a unui numărInstrucțiunea while (structuri repetitive)Căutare binară în C++Aplicații cu ciurul lui Eratostene în C++: suma divizorilor, numărul divizorilorTransformarea unei litere mari în literă mică în C++Suma elementelor unui vector recursiv în C++Verifică dacă o literă este mică sau mare în C++Citirea și afișarea matricelor în C++Interclasarea a doi vectori în C++Mediana unui șir de valori în C++Prima cifră a unui număr în C++Transformarea unui număr din baza 10 în baza 2 în C++Recursivitate în C++Cifra maximă și minimă a unui număr în C++Afișarea divizorilor primi ai unui număr în C++Numărul de divizori al unui număr în C++Ciurul lui Eratostene în C++CMMMC a două numere în C++ (cel mai mic multiplu comun)Cifra maximă a unui număr recursiv în C++Al N-lea termen dintr-o progresie geometricăVerificare dacă șir de caractere este palindrom în C++Structuri repetitive (while, do while, for, etc)Sortare crescătoare recursivă în C++ - Merge sort și Bubble sortOperații cu numere mari în C++ - Toate funcțiile explicateVerifică dacă un număr este par sau impar fără modulo în C++Distanța dintre două puncte în C++Funcții în C++. Ce sunt subprogrameleCitește un șir de caractere cu spații în C++Cel mai mic număr cu suma cifrelor N în C++Suma numerelor naturale dintr-un interval dat în C++Verifică dacă o literă este vocală în C++Ce înseamnă endl în C++?Al N-lea termen dintr-o progresie aritmeticăComplexitatea unui algoritm (timp și spațiu) în C++Oglinditul unui număr în C++Comentarii în C++Șiruri de caractere în C++. Tot ce trebuie să știiSuma 1 + 2 + 3 + ... + N în C++Ce este o funcție void în C++?Numărul aranjamentelor în C++ (formula aranjamentelor)Cea mai lungă secvență de elemente crescătoare în C++Bordarea unei matrice în C++Factorialul unui număr în C++Suma divizorilor numerelor de la 1 la N (Folosind ciurul lui Eratostene)Află secolul unui an citit de la tastatură în C++Algoritm recursiv pentru căutare binară (clasa a X-a)Verifică dacă un bit de pe o anumită poziție este 1 sau 0 în C++Copiuțe: Cifrele unui numărNumere triunghiulare. Verificarea unui număr triunghiularTutorial instalare CodeBlocks (ușor) - Introducere în informatică C++Numărul de divizori primi ai unui număr în C++Verifică dacă un caracter este literă în C++Câte numere naturale sunt într-un interval dat? (C++)Verificarea unui an bisect în C++Numărul combinărilor în C++ (formula combinărilor)Divide et Impera (metodă de programare C++)Cel mai semnificativ bit în C++Instrucțiunea break (structuri repetitive)Cel mai frecvent element dintr-un șir în C++Rădăcina cubică a unui număr în C++ (cube root)Cifrele unui număr. Prelucrarea cifrelor unui număr în C++Inversarea unui șir de caractere în C++Cel mai puțin semnificativ bit în C++Afișarea elementelor unui vector recursiv în C++Verificare număr prim în C++ (Clasa a IX-a)Combinatorică în C++: permutări, aranjamente, combinări și altelePointer în C++. Variabile de tipul char * (char steluță)Cel mai mare divizor comun (CMMDC) a două numere în C++Suma divizorilor unui număr în C++Verifică dacă trei puncte sunt coliniare C++Maximul și minimul a trei valori în C++Vectorii în C++: declarare și parcurgere

© Drepturi de autor

Echipa InfoAs își rezervă drepturile de autor pentru conținutul acestei pagini. Copierea conținutului fără acordul scris expres al InfoAs reprezintă o încălcare a Legii 8/1996 și va fi tratată ca atare.

Trimite lecția

Toată lecția

Doar videoclipul pe YouTube

Informatica devine ușoară cu InfoAs

Intră în cont