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;
}

Download