AcWing 1490. 最长上升子串
原题链接
简单
作者:
xhalz_syx
,
2023-11-13 15:27:00
,
所有人可见
,
阅读 60
#include <iostream>
#include <cstdio>
#include <algorithm>
#include <vector>
using namespace std;
const int N = 1e5 + 10;
int n;
int a[N];
vector<pair<int, int> > vec;
int main()
{
scanf("%d", &n);
for (int i = 1; i <= n; i ++ ) cin >> a[i];
for (int i = 1; i <= n;)
{
int l = i, r = i + 1;
while (a[r] > a[r - 1] && r <= n)
{
r ++ ;
}
r -- ;
vec.push_back({l, r});
i = r + 1;
}
int ans = 0;
for (int i = 0; i < vec.size(); i ++ )
{
auto x = vec[i];
int l = x.first, r = x.second;
if (i - 1 >= 0)
{
auto x0 = vec[i - 1];
int r0 = x0.second, l0 = x0.first;
if (a[r0 - 1] < a[l] || a[r0] < a[l + 1])
{
ans = max(ans, r - l0);
}
}
ans = max(ans, r - l + 1);
}
ans = min(ans, n - 1);//必须删一个
cout << ans;
return 0;
}