div.2/Bellovin<最长上升子序列>

来源:互联网 发布:亩和平方米精准算法 编辑:程序博客网 时间:2024/05/18 16:55

题意:

序列arr[i--n];输出以a[i]为结尾的最长上升子序列。1<=n<=100000;

思路:

O(n*log(n)),求最长上升子序列。
#include<cstdio>#include<cstring>#include<iostream>#include<algorithm>using namespace std;const int maxn = 100000+100;int arr[maxn];int main (){    int T;scanf("%d",&T);    while(T--)    {        int n,k=0;scanf("%d",&n);        for(int i=1;i<=n;i++)        {            int t;            scanf("%d",&t);            int pos=int(lower_bound(arr,arr+k,t)-arr);            printf("%d",pos+1);            if(i<n)                printf(" ");            if(pos==k)                k++;            arr[pos]=t;        }        printf("\n");    }    return 0;}
0 0
原创粉丝点击