Remove One Element
作者:互联网
题意:求删除一个后的上升子序列的长度。
思路:分别记录第i个数前面的递增个数和后面的递增个数,
最后遍历所有的i,因为只有两种情况值最大:
1. 第i个的递增个数
2. 当arr[i-1]<arr[i+1]时,不要第i个时(i-1)前面的递增个数 + (i+1)后面的递增个数。
#include <bits/stdc++.h>
#define SIS std::ios::sync_with_stdio(false),cin.tie(0),cout.tie(0)
#define ll long long
#define INF 0x3f3f3f3f
#define mod 998244353
using namespace std;
const int N=2e5+5;
int gcd(int a,int b)
{
return b==0?a:gcd(b,a%b);
}
int dp[2][N];
int a[N];
int main()
{
SIS;
int n;
cin>>n;
for(int i=1;i<=n;i++)
{
cin>>a[i];
if(a[i]>a[i-1])dp[0][i]=dp[0][i-1]+1;
else dp[0][i]=1;
}
for(int i=n;i>=1;i--)
{
if(a[i+1]>a[i])dp[1][i]=dp[1][i+1]+1;
else dp[1][i]=1;
}
int ans=0;
for(int i=1;i<=n;i++)
{
ans=max(ans,dp[0][i]);
if(a[i-1]<a[i+1])
ans=max(ans,dp[0][i-1]+dp[1][i+1]);
}
cout<<ans<<endl;
return 0;
}
Ray.C.L
发布了73 篇原创文章 · 获赞 4 · 访问量 2218
私信
关注
标签:SIS,int,递增,个数,Remove,Element,dp,define 来源: https://blog.csdn.net/qq_43619680/article/details/103995966