/*POJ1631 AC */
#include <stdio.h>
#include <algorithm>
using namespace std;
int BinSearch(int * a, int len, int num) {
int left = 0, right = len, mid;
while (left <= right) {
mid = left + (right - left) / 2;
if (num == a[mid])
return mid;
else if (num < a[mid])
right = mid - 1;
else
left = mid + 1;
}
return left;
}
int main() {
int a[40005], c[40005];
int T;
scanf("%d", &T);
while (T--) {
int n;
scanf("%d", &n);
for (int i=0; i<n; i++)
scanf("%d", &a[i]);
c[0] = -1;
c[1] = a[0];
int len = 1;
for (int i=1; i<n; i++) {
int k = BinSearch(c, len, a[i]);
c[k] = a[i];
if (k > len)
len = k;
}
printf("%d\n", len);
}
return 0;
}
POJ 1631 最长上升子序列O(nlogn)
最新推荐文章于 2021-08-02 16:03:10 发布