在线等,求调!!!
查看原帖
在线等,求调!!!
783810
furina_yyds楼主2023/10/29 21:20
#include<cstdio>
#include<iostream>
#include<algorithm>
#include<cstring>
#pragma GCC optimize(3)
using namespace std;
int n, f[100005], g[100005], x[100005], y[100005], a[100005];
//f[i]:从左到右,以a[i]为结尾的上升子序列的最大长度
//g[i]:从右到左,以a[i]为结尾的上升子序列的最大长度
//x[i]:长度为i时,上升子序列的最小末尾元素
//y[i]:长度为i时,上升子序列的最小末尾元素
int main(){
	scanf("%d", &n);
	for(int i = 1; i <= n; i++){
		scanf("%d", &a[i]);
	}
	memset(x, 0x3f, sizeof x);
	for(int i = 1; i <= n; i++){
		int k = lower_bound(x + 1, x + n + 1, a[i]) - x;
		x[k] = a[i];
		f[i] = k;
	}
	memset(y, 0x3f, sizeof y);
	for(int i = n; i >= 1; i--){
		int k = lower_bound(y + 1, y + n + 1, a[i]) - y;
		y[k] = a[i];
		g[i] = k;
	}
	int ans = 0;
	for(int i = 1; i <= n; i++){
		ans = max(ans, f[i] + g[i] - 1);
	}
	printf("%d", ans);
	return 0;
}
2023/10/29 21:20
加载中...