POJ 2533 Longest Ordered Subsequence

解题思路:最长递增子序列

  
    
#include < iostream >
using namespace std;
int main()
{
int i,j,k,n,p,q,m,len,num[ 1000 ],B[ 1001 ];
scanf(
" %d " , & n);
for (i = 0 ;i < n;i ++ )scanf( " %d " , & num[i]);
for (B[ 0 ] =- 1 ,B[ 1 ] = num[ 0 ],len = 1 ,i = 1 ;i < n;i ++ )
{
for (p = 0 ,q = len,m = (p + q) / 2 ;p <= q;m = (p + q) / 2 )
if (B[m] < num[i])p = m + 1 ; else q = m - 1 ;
B[p]
= num[i]; if (p > len)len ++ ;
}
printf(
" %d\n " ,len);
return 0 ;
}

 

你可能感兴趣的:(sequence)