380
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
nnumere 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
#include <bits/stdc++.h>
using namespace std;
int n , x , a[100001] , cnt;
int main()
{
cin >> n;
for(int i = 1 ; i <= n ; i++)
{
cin >> x;
int st = 1 , dr = cnt;
while(st <= dr)
{
int m = (st + dr) / 2;
if(a[m] < x) dr = m - 1;
else st = m + 1;
}
if(st > cnt) a[++cnt] = x;
else a[st] = x;
}
cout << cnt;
}
Comentarii