Pagini recente » Cod sursa (job #650039) | Cod sursa (job #3316153) | Cod sursa (job #3316155) | Cod sursa (job #3317604) | Cod sursa (job #3316112)
#include <bits/stdc++.h>
using namespace std;
const int NMAX = 1e5;
int v[NMAX], prev[NMAX + 5];
int scm[NMAX]; /// scm[i] = cea mai mica valoare cu care sa se termine sirul de lungime i
int main() {
ifstream cin("scmax.in");
ofstream cout("scmax.out");
ios::sync_with_stdio(false), cin.tie(0);
int n;
cin >> n;
for (int i = 1; i <= n; i++) {
cin >> v[i];
}
scm[1] = v[1];
for (int i = 2; i <= n; i++) {
int st = 1, dr = n, r = -1;
while (st <= dr) {
int mid = (st + dr) / 2;
if (v[i] > scm[mid] && scm[mid] != 0) {
r = mid;
st = mid + 1;
}
else dr = mid - 1;
}
if (r == -1) scm[1] = min(scm[1], v[i]);
else scm[r + 1] = v[i];
}
int ans = 0;
for (int i = 1; i <= n; i++)
if (scm[i] > 0)
ans = max(ans, i);
cout << ans << '\n';
return 0;
}