随笔 - 531  文章 - 0  评论 - 3  阅读 - 10215 

给一个序列A,求一个最长子序列,长度为2k+1

满足前k+1个数递增,后k个递减

 

 LIS板子题,正反各求一次,枚举中间的交点

 

复制代码
#include<iostream>
#include<cstring>
#include <algorithm>
using namespace std;
 const int N=1e5;

 int st[N],f[N],g[N];
 int n,a[N];
 
 void dp(){
   int i,j,l;    
   memset(st,0,sizeof st);
   st[1]=a[1],l=1; 
   f[1]=1;
   
   for(i=2;i<=n;i++){
       if(a[i]>st[l]) f[i]=++l,st[l]=a[i];
       j=lower_bound(st+1,st+1+l,a[i])-st; f[i]=j; st[j]=a[i]; 
   }
   
   memset(st,0,sizeof st);
   st[1]=a[n],l=1; 
   g[n]=1;
   
   for(i=n-1;i>0;i--){
        if(a[i]>st[l]) g[i]=++l,st[l]=a[i];
        j=lower_bound(st+1,st+1+l,a[i])-st; g[i]=j; st[j]=a[i]; 
   }
 }
 int main(){
     int i,j;
     
     while(cin>>n){
     for(i=1;i<=n;i++) cin>>a[i];
         dp();
           int ans=0;
           for(i=1;i<=n;i++){
                ans=max(ans,min(f[i],g[i])*2-1);
           }
           cout<<ans<<endl;
     }
 }
 
复制代码

 

posted on   towboat  阅读(14)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!
点击右上角即可分享
微信分享提示