题目:最大上升子序列。
分析:dp,单调队列。点掉队列优化lis算法。
说明:(2011-09-19 01:36)。
#include <iostream>
#include <cstdlib>
using namespace std;
int data[ 1002 ];
int Queu[ 1002 ];
int BS( int tail, int key )
{
int l = 0,h = tail;
while ( l < h ) {
int m = (l+h)/2;
if ( Queu[ m ] > key )
h = m;
else l = m+1;
}
return l;
}
int main()
{
int t,n;
while ( cin >> t )
while ( t -- ) {
cin >> n;
for ( int i = 1 ; i <= n ; ++ i )
cin >> data[ i ];
int tail = 0;
Queu[ 0 ] = data[ 1 ];
for ( int i = 2 ; i <= n ; ++ i )
if ( data[ i ] > Queu[ tail ] )
Queu[ ++ tail ] = data[ i ];
else Queu[ BS( tail, data[ i ] ) ] = data[ i ];
cout << tail+1 << endl;
if ( t ) cout << endl;
}
return 0;
}

162

被折叠的 条评论
为什么被折叠?



