rt,悬关
#include<bits/stdc++.h>
#define int long long
using namespace std;
int n,a[500005],dp[500005][2];
int tr[5000005],tr2[5000005];
void add(int p,int l,int r,int dep,int k){
if(l==r){
tr[p]=k;
return ;
}
int mid=(l+r)>>1;
if(dep<=mid){
add(p*2,l,mid,dep,k);
}
else{
add(p*2+1,mid+1,r,dep,k);
}
tr[p]=max(tr[p*2],tr[p*2+1]);
}
int qucha(int p,int l,int r,int x,int y){
if(r<x||l>y){
return 0;
}
if(l>=x&&r<=y){
return tr[p];
}
int sum=0;
int mid=(l+r)>>1;
if(x<=mid){
sum=max(sum,qucha(p*2,l,mid,x,y));
}
if(mid<y){
sum=max(sum,qucha(p*2+1,mid+1,r,x,y));
}
return sum;
}
void add2(int p,int l,int r,int dep,int k){
if(l==r){
tr2[p]=k;
return ;
}
int mid=(l+r)>>1;
if(dep<=mid){
add2(p*2,l,mid,dep,k);
}
else{
add2(p*2+1,mid+1,r,dep,k);
}
tr2[p]=max(tr2[p*2],tr2[p*2+1]);
}
int qucha2(int p,int l,int r,int x,int y){
if(r<x||l>y){
return 0;
}
if(l>=x&&r<=y){
return tr2[p];
}
int sum=0;
int mid=(l+r)>>1;
if(x<=mid){
sum=max(sum,qucha2(p*2,l,mid,x,y));
}
if(mid<y){
sum=max(sum,qucha2(p*2+1,mid+1,r,x,y));
}
return sum;
}
signed main(){
ios::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
//freopen("pairing4.in","r",stdin);
cin>>n;
int maxx=0;
for(register int i=1;i<=n;i++){
cin>>a[i];
a[i]+=2;
maxx=max(maxx,a[i]);
}
maxx++;
int ans=0;
for(register int i=1;i<=n;i++){
dp[i][0]=qucha2(1,1,maxx,a[i],a[i])+1;
add(1,1,maxx,a[i],dp[i][0]);
dp[i][1]=max(qucha(1,1,maxx,1,a[i]-1),qucha(1,1,maxx,a[i]+1,maxx))+1;
add2(1,1,maxx,a[i],dp[i][1]);
ans=max(ans,dp[i][0]);
}
cout<<ans<<'\n';
return 0;
}