Pagini recente » Cod sursa (job #688169) | Cod sursa (job #605975) | Cod sursa (job #529790) | Cod sursa (job #389774) | Cod sursa (job #2206287)
#include <cstdio>
#include <iostream>
#define NMAX 100010
using namespace std;
int n, v[NMAX], sSize, s[NMAX], ans;
int bSearch(int searched, int sSize, int* s) {
int left = 0, right = sSize - 1;
while (left < right) {
int middle = left + (right - left) / 2;
if (v[searched] <= v[s[left]]) right = middle;
else left = middle + 1;
}
return left;
}
int main() {
freopen("scmax.in", "r" , stdin);
freopen("scmax.out", "w", stdout);
cin >> n;
for (int it = 0; it < n; ++it) {
cin >> v[it];
}
ans = sSize = 1;
s[0] = 0;
for (int it = 1; it < n; ++it) {
int bsIndex = bSearch(it, sSize, s);
if (bsIndex == sSize - 1 && v[s[bsIndex]] < v[it]) {
s[sSize++] = it;
++bsIndex;
} else {
if (0 != bsIndex && v[s[bsIndex - 1]] == v[it]) --bsIndex;
s[bsIndex] = it;
}
if (ans < bsIndex + 1) ans = bsIndex + 1;
}
cout << ans << endl;
return 0;
}