首页 > 代码库 > Codeforces Round #FF (Div. 2)
Codeforces Round #FF (Div. 2)
又一场中国场,果然注定被虐的场。。。
A,B:都很水,差不多模拟就好了;
C题:CF难得的题意简洁,
我们可以预处理出从左到右递增的数列个数,
举个例子:1 3 2 4 5 7
L[I] 从左开始 1 2 1 2 3 4
从右往左是递减的个数: R[I] 2 1 1 3 2 1
我们发现对于i: A[I-1]<A[I+1]-1 才有可能改变A[I]找到更多的数,
ANS=MAX(ANS,MAX(L[I-1],R[I+1])+1);
具体有很多被HACK的细节,耐心处理下
代码:
#include<iostream>#include<string>#include<string.h>#include<math.h>#include<algorithm>#include<vector>#include<set>#include<map>#define N 111111using namespace std;int a[N],l[N],r[N];int main(){ int n; cin>>n; for (int i=1;i<=n;i++){ cin>>a[i]; l[i]=r[i]=1; } int ans=1; for (int i=2;i<=n;i++) { if (a[i]>a[i-1]) l[i]+=l[i-1]; ans=max(ans,l[i]); } for (int i=n-1;i>=1;i--) if (a[i]<a[i+1]) r[i]+=r[i+1]; l[0]=-1; r[n+1]=-1; a[0]=1111111111; a[n+1]=-1; for(int i=1;i<=n;i++) { if (a[i-1]<a[i+1]-1) ans=max(ans,l[i-1]+r[i+1]+1); else ans=max(ans,max(r[i+1],l[i-1])+1); } cout<<ans<<endl; return 0;}
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。