Pagini recente » Cod sursa (job #2233624) | Cod sursa (job #594814) | Cod sursa (job #1189106) | Cod sursa (job #192041) | Cod sursa (job #1996736)
#include <iostream>
#include <stdio.h>
#include <vector>
using namespace std;
int N, ans;
vector<int> numbers, bs;
int binarySearch(int left, int right, int target) {
while (left != right) {
int middle = left + (right - left) / 2;
if (numbers[bs[middle]] <= target) {
left = middle + 1;
} else {
right = middle;
}
}
return left;
}
int main() {
freopen("scmax.in", "r", stdin);
freopen("scmax.out", "w", stdout);
cin >> N;
for (int it = 0; it < N; ++it) {
int temp;
cin >> temp;
numbers.push_back(temp);
}
bs.push_back(0);
for (int it = 1; it < N; ++it) {
int position = binarySearch(0, bs.size() - 1, numbers[it]);
if (bs.size() - 1 == position && numbers[bs[position]] < numbers[it]) {
bs.push_back(it);
++position;
} else {
if (position != 0 && numbers[bs[position - 1]] == numbers[it]) --position;
bs[position] = it;
}
if (ans < position + 1) ans = position + 1;
}
cout << ans << endl;
return 0;
}