刚才T1
  • 板块学术版
  • 楼主_lqs_
  • 当前回复18
  • 已保存回复18
  • 发布时间2023/3/12 18:03
  • 上次更新2023/10/23 21:44:56
查看原帖
刚才T1
664744
_lqs_楼主2023/3/12 18:03
#include<bits/stdc++.h>
using namespace std;
#define int long long
int n,m,i,j,ans,len,la,flag,lag;
int a[1000005],f[100005][2];
signed main(){
	scanf("%lld",&n);
	for(i=1;i<=n;i++) scanf("%lld",&a[i]);
	for(i=1;i<=n;i++){
		if(a[i]>la) la=a[i],len++;
		else{
			la=a[i],len=1;
			if(i<=n) flag=1;
		}
		ans=max(ans,len);
	}
	if(flag) ans++;
	a[0]=1e9;
	for(i=1;i<=n;i++){
		if(a[i+1]-a[i-1]>=2 && (a[i]<=a[i-1] || a[i]>=a[i+1])){
			int sum1=1,sum2=1;
			j=i-1;
			while(a[j-1]<a[j]) j--,sum1++;
			j=i+1;
			while(a[j+1]>a[j]) j++,sum2++;
			ans=max(ans,sum1+sum2+1);
		}
	}
	printf("%lld",ans);
	return 0;
}

赛时这份代码过了,本以为会超时,但是想了一下枚举更换的点复杂度似乎是正确的?求问一下能不能 hack 掉?

2023/3/12 18:03
加载中...