/*#######################################[ LOS Templet Of Lyz ]#######################################*/
typedef bool BOOL;
typedef unsigned int UINT;
template < typename SEQUTYPE >
//CMP:返回所求序列中前后元素的比较关系("<","<=",">",">="即对应"升序","不降序","降序","不升序")
UINT LOS(SEQUTYPE *Sequ , UINT nSize , BOOL (*CMP)(SEQUTYPE*,SEQUTYPE*))
{
UINT Len , *MinID = new UINT [ nSize + 1 ];
MinID[ Len = 1 ] = 0;
for( UINT i = 1 ; i < nSize ; ++i )
{
if( ! CMP( Sequ + MinID[1] , Sequ + i ) ) { MinID[1] = i; continue; }
if( CMP( Sequ + MinID[Len] , Sequ + i ) ) { MinID[ ++Len ] = i; continue; }
UINT L = 1 , R = Len;
while( L < R )
{
UINT M = ( L + R ) >> 1;
if( CMP( Sequ + MinID[ M + 1 ] , Sequ + i ) ) { L = M + 1; }
else { R = M; }
}
MinID[ L + 1 ] = i;
}
delete [] MinID;
return Len;
}
/*#######################################[ LOS Templet Of Lyz ]#######################################*/
[模板]最长有序子序列
最新推荐文章于 2021-02-27 16:55:20 发布