普通的dp写法

f[i] = max{ f[j] +1 }  j<i  &&a[i]<=a[j]   复杂度 O(n^2) 

单调队列写法 O(nlogn)

        

int n,a[N],f[N],st[N],len;
 
 int cmp(int x,int y){
 	 return x>y;
 }
 void solve(){
 	int i;
 	len=1; st[1]=a[1];
   
   for(i=2;i<=n;i++){
   	 if(a[i]<=st[len]) st[++len]=a[i];
   	 else{
   	 	int t=upper_bound(st+1,st+1+len,a[i],cmp)-st;
   	 	f[i]=t;
   	 	st[t]=a[i];
	 }
   }
   cout<<len;
 }

posted on 2022-10-19 19:34  towboat  阅读(35)  评论(0)    收藏  举报