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ât100.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 .
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!