牛牛的数列( 牛牛的数列 (nowcoder.com) )
#include<bits/stdc++.h>
using namespace std;
int a[100010];
vector < pair<int,int> > b;
int main(){
ios::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
int n,l=0,r=0,maxn=0;
cin>>n;
for(int i=0;i<n;i++)cin>>a[i];
for(int i=1;i<n;i++){
if(a[i]>a[i-1])r++;
else{
b.push_back({l,r});
r=l=i;
}
}
b.push_back({l,r});
cout<<b.size()<<endl;
//相邻区间合并(后一个区间长大于1)
for(int i=1;i<b.size();i++)
if(b[i].second>b[i].first && a[b[i].first+1]-a[b[i-1].second]>1)
maxn=max(maxn,b[i].second-b[i-1].first+1);
//间隔区间和并
for(int i=1;i<b.size()-1;i++)
if(b[i].second==b[i].first && a[b[i+1].first]-a[b[i-1].second]>1)
maxn=max(maxn,b[i+1].second-b[i-1].first+1);
//不合并区间(原区间长+1)
//!!! 有可能整个区间都递增 不能直接加1
for(int i=0;i<b.size();i++){
maxn=max(maxn,b[i].second-b[i].first+1+1);
}
//排除序列长为1的情况
if(n==1)cout<<"1";
else cout<<min(maxn,n);
return 0;
}