#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
#include<cmath>
using namespace std;
typedef long long LL ;
const int maxn = 1e6 + 9;
int t;
int p;
int a[maxn];
int dp[maxn];
int main()
{
scanf("%d",&t);
while(t--)
{
scanf("%d",&p);
int i;
for(i = 1; i <= p; i++)
scanf("%d",&a[i]);
dp[1] = a[1];
int len = 1;
for(i = 2; i <= p; i++)
{
if(a[i] > dp[len])
{
//len++;
dp[++len] = a[i];
}
else
{
int pos;
pos = lower_bound(dp,dp + len,a[i]) - dp;
dp[pos] = a[i];
}
}
cout<< len << endl;
}
}
最长上升子序列
最新推荐文章于 2024-08-15 14:32:03 发布