lis算法(nlogn)

来源:互联网 发布:finale for mac 编辑:程序博客网 时间:2024/06/08 02:19

题目链接: 点击打开链接

代码:

#include<stdio.h>#include<string.h>#include<algorithm>using namespace std;//int num[10]= {3,6,3,2,4,6,7,5,4,3};const int INF=0x3f3f3f3f;int l;int g[100010];int d[100010];int num[100010];int main(){    int a;    scanf("%d",&a);    while(a--)    {        scanf("%d",&l);        memset(num,0,sizeof(num));        for(int i=0; i<l; i++)            scanf("%d",&num[i]);        fill(g,g+l,INF);        int max_=-1;        for(int i=0; i<l; i++)        {            int j=lower_bound(g,g+l,num[i])-g;            d[i]=j+1;//            if(max_<d[i])//                max_=d[i];这里可以改成求最长上升子序列            g[j]=num[i];        }        for(int i=0; i<l-1; i++)            printf("%d ",d[i]);        printf("%d\n",d[l-1]);//        printf("%d\n",max_);    }    return 0;}
lis算法,一个小的知识点,最长上升子序列的改良版。

0 0