Pagini recente » Cod sursa (job #849383) | Cod sursa (job #124177) | Cod sursa (job #873171) | Cod sursa (job #845187) | Cod sursa (job #2988363)
#include <fstream>
using namespace std;
const int infinit = 2e9 + 1;
const int MAX = 100001;
ifstream fin("scmax.in");
ofstream fout("scmax.out");
int n, i, nr, s, d, m, vm[MAX], p, a[MAX], lmax;
// vm[i] = valoarea minima cu care se termina un subsir strict crescator de lungime i
int main() {
fin >> n;
for (i = 1; i <= n; i++)
fin >> a[i];
for (i = 1; i <= n; i++)
vm[i] = infinit;
for (i = 1; i <= n; i++) {
s = 0, d = i + 1;
while (s + 1 < d) {
m = (s + d) / 2;
if (vm[m] < a[i])
s = m;
else
d = m;
}
vm[d] = a[i];
}
lmax = n;
while (vm[lmax] == infinit)
lmax--;
fout << lmax;
}