Pagini recente » Istoria paginii runda/zienuntu/clasament | Cod sursa (job #1164994) | Istoria paginii runda/jkn/clasament | Istoria paginii runda/summer_camp_3/clasament | Cod sursa (job #1947383)
#include <stdio.h>
#define NMAX 100010
int N, vN[NMAX], length[NMAX], buffer[NMAX], left, right, max = -1;
int binarySearch(int left, int right, int target) {
while (left != right) {
int middle = (left + right) / 2;
if (buffer[middle] <= target) {
left = middle + 1;
} else {
right = middle;
}
}
return left;
}
int main() {
freopen("scmax.in", "r", stdin);
freopen("scmax.out", "w", stdout);
scanf("%d", &N);
for (int it = 0; it < N; ++it) {
scanf("%d", &vN[it]);
}
left = right = 0;
buffer[0] = vN[0] + 1;
for (int it = 0; it < N; ++it) {
int position = binarySearch(left, right, vN[it]);
if (right == position && buffer[position] < vN[it]) {
buffer[++right] = vN[it];
length[it] = right - left + 1;
} else {
buffer[position] = vN[it];
length[it] = position - left + 1;
}
if (max < length[it]) {
max = length[it];
}
}
printf("%d\n", max);
fclose(stdin);
fclose(stdout);
return 0;
}