Rezolvare completă PbInfo #2684 hard_ssc

Se dă un șir de n numere naturale. Șirul poate fi partiționat în mai multe moduri într-un număr de subșiruri strict crescătoare. De exemplu, șirul 4 6 2 5 8 1 3 7 poate fi partiționat astfel: 4 6 8 (primul subșir), 2 5 7 (al doilea) și 1 3 (al treilea). O altă modalitate este formând patru subșiruri: 4 5 7, 6 8, 2 3 și 1.

Cerința

Să se determine numărul minim de subșiruri strict crescătoare în care se poate partiționa șirul.

Date de intrare

Programul citește de la tastatură numărul n, iar apoi șirul de n numere naturale, separate prin spații.

Date de ieșire

Programul va afișa pe ecran numărul minim de subșiruri strict crescătoare în care se poate partiționa șirul.

Restricții și precizări

  • 1 ≤ n ≤ 100.000
  • cele n numere citite vor fi mai mici decât 100.000
  • Un subșir se obține dintr-un șir prin eliminarea a zero, unul, sau mai multe elemente.

Exemplu

Intrare

8
4 6 2 5 8 1 3 7

Ieșire

3

Cum e corect?

cout < "As la info"; cout << "As la info"; cout >> "As la info";

Felicitări! Poți mai mult?

Avem sute de probleme pentru tine, fiecare cu explicații ușor de înțeles.

Greșit, dar nu-i bai!

Antrenează-te cu sutele de probleme pe care ți le-am pregătit. Îți explicăm fiecare problemă în parte.

Rezolvare

Iată rezolvarea de 100 de puncte pentru problema hard_ssc:

#include <bits/stdc++.h>
#define nmax 100003
using namespace std;

int n, d[nmax], k;
/// d[i]=capatul celui de-al i-lea subsir

void CautBin(int x)
{
    if (x <= d[k])
    {
        d[++k] = x;
        return ;
    }
    int st, dr, p, mid;
    p = st = 1; dr = k;
    while (st <= dr)
    {
        mid = (st + dr) / 2;
        if (d[mid] < x)
        {
            p = mid;
            dr = mid - 1;
        }
        else st = mid + 1;
    }
    d[p] = x;
}

int main()
{
    int i, x;
    cin >> n >> x;
    k = 1;
    d[1] = x;
    for (i = 2; i <= n; i++)
    {
        cin >> x;
        CautBin(x);
    }
    cout << k << "\n";
    return 0;
}

Atenție

Enunțurile afișate pe această pagină aparțin exclusiv site-ului PbInfo. Astfel, pentru ștergerea conținutului, puteți să ne contactați la adresa Adresa de email.

Rezolvarea problemei #2684 hard_ssc

Pe această pagină găsești rezolvarea de 100 de puncte pentru problema #2684 hard_ssc de pe PbInfo.ro. Atenție: nu încurajăm copiatul codului! Totuși, credem cu tărie că analizarea unei soluții corecte este o metodă foarte ușoară de a învăța informatică, astfel că oferim sursele pentru peste 1500 de probleme de pe platforma PbInfo.ro.

Pentru rezolvări PbInfo de la peste 1500 de probleme, vă invităm să intrați pe site-ul nostru!