SPSEQ - Sequences
Tác giả: khuc_tuan
Ngôn ngữ: C++
#include <iostream>
#include <algorithm>
#include <cstdio>
using namespace std;
int n;
int a[100010], f1[100010], f2[100010], g[100010];
void process( int * a, int * f) {
int ng = 0;
for(int i=0;i<n;++i) {
int id = lower_bound( g, g + ng, a[i]) - g;
if(id == ng) ++ng;
g[id] = a[i];
f[i] = ng;
}
}
int main() {
scanf("%d", &n);
for(int i=0;i<n;++i) scanf("%d", a+i);
process( a, f1);
reverse( a, a + n);
process( a, f2);
int best = 0;
for(int i=0;i<n;++i) best = max( best, min(f2[i], f1[n-i-1]) * 2 - 1);
cout << best << endl;
return 0;
}