You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

53 lines
1.2 KiB

2 years ago
#include <bits/stdc++.h>
using namespace std;
const int N = 1010;
int n, a[N];
// f[i]:长度为i的正序递增序列中末尾元素最小的是f[i]
// p1[i]:记录第i个数字被放的f数组中位置,也就是正序排名第几
int f[N], fl, p1[N];
// g[i]:长度为i的倒序递增序列中末尾元素最小的是g[i]
// p2[i]:记录第i个数字被放的g数组中位置,也就是倒序排名第几
int g[N], gl, p2[N];
int res;
int main() {
cin >> n;
1 year ago
for (int i = 0; i < n; i++) cin >> a[i];
2 years ago
// 正向
1 year ago
f[0] = a[0];
p1[0] = 1;
2 years ago
1 year ago
for (int i = 0; i < n; i++)
2 years ago
if (a[i] > f[fl]) {
f[++fl] = a[i];
p1[i] = fl;
} else {
1 year ago
int t = lower_bound(f, f + fl, a[i]) - f;
2 years ago
f[t] = a[i];
p1[i] = t;
}
// 反向
1 year ago
g[0] = a[n - 1];
p2[n - 1] = 1;
2 years ago
1 year ago
for (int i = n - 1; i >= 0; i--)
2 years ago
if (a[i] > g[gl]) {
g[++gl] = a[i];
p2[i] = gl;
} else {
1 year ago
int t = lower_bound(g, g + gl, a[i]) - g;
2 years ago
g[t] = a[i];
p2[i] = t;
}
1 year ago
for (int i = 0; i < n; i++) res = max(res, p2[i] + p1[i] + 2 - 1);
2 years ago
printf("%d\n", res);
return 0;
}