描述:由于数组会到10000,所以普通的记忆化搜索会超时,需要改进一下
#include <cstdio>
int n,sum,len;
int v[10010][2],arr[10010],s[10010];
int min(int x,int y)
{
return x>y?y:x;
}
int max(int x,int y)
{
return x>y?x:y;
}
int cal(int p,int &len)
{
if(!len||s[len]<p) s[++len]=p;
else
{
int last=len-1,first=0,c;
while(first<=last)
{
c=(first+last)/2;
if(s[c]==p) break;
else if(s[c]>p) last=c-1;
else first=c+1;
}
if(s[c]<p) s[c+1]=p;
else s[c]=p;
}
return len;
}
int main()
{
// freopen("a.txt","r",stdin);
while(scanf("%d",&n)!=EOF)
{
sum=1;
len=0;
for(int i=0; i<n; i++)
{
scanf("%d",&arr[i]);
v[i][0]=cal(arr[i],len);
}
len=0;
for(int i=n-1; i>=0; i--)
{
v[i][1]=cal(arr[i],len);
sum=max(sum,min(v[i][0],v[i][1])*2-1);
}
printf("%d\n",sum);
}
return 0;
}
10534 - Wavio Sequence
最新推荐文章于 2015-08-14 16:32:33 发布