代码:
#include<bits/stdc++.h>
using namespace std;
char *p1, *p2, buf[100000];
#define nc() (p1==p2 && (p2=(p1=buf)+fread(buf,1,100000,stdin),p1==p2)?EOF:*p1++)
using namespace std;
inline int rd()
{
int x = 0, f = 1;
char c = nc();
while (c < 48 || c > 57) f = (c == '-') ? -1 : 1, c = nc();
while (c >= 48 && c <= 57) x = (x<<3)+(x<<1) + c-48, c = nc();
return x*f;
}
int n,a[50002],dp1[50002],dp2[50002],b[50002];
bool use1[100002],use2[100002];
int main(){
freopen("P3129_3.in","r",stdin);
n=rd();
for (int i=1;i<=n;i++){
a[i]=rd();
use1[a[i]]=use2[a[i]]=1;
}
int cnt=0;
for (int i=1;i<=2*n;i++){
if (!use1[i]) b[++cnt]=i;
}
for (int i=1;i<=n;i++){
int o=a[i]+1;
while (o<=2*n&&use1[o]==1) o++;
dp1[i]=dp1[i-1];
if (o<=n*2){
use1[o]=!use1[o];
dp1[i]++;
}
int j=n+1-i;
o=a[j]-1;
while (o>=1&&use2[o]==1) o--;
dp2[j]=dp2[j+1];
if (o>=1){
use2[o]=!use2[o];
dp2[j]++;
}
}
int ans=0;
for (int i=1;i<=n;i++){
ans=max(ans,dp1[i]+dp2[i+1]);
}
printf("%d",ans);
return 0;
}
第三个就爆了(大悲)