【LIS】百炼-2757

来源:互联网 发布:aocu2879vf接mac 编辑:程序博客网 时间:2024/04/30 03:11

题目链接:http://bailian.openjudge.cn/practice/2757/

这是一道模板题,时间复杂度为O(nlogn),当然n^2的算法也可以AC,

#include<iostream>#include<string>#include<cstdio>#include<cstring>#include<queue>#include<map>#include<stack>#include<set>#include<vector>#include<algorithm>#define LL long longusing namespace std;int a[1005];int dp[1005];int main(){    int n,len;    while(~scanf("%d",&n)){        len=1;        for(int i=1;i<=n;i++) scanf("%d",&a[i]);        dp[1]=a[1];        for(int i=2;i<=n;i++){            if(a[i]>dp[len]) dp[++len]=a[i];            //  可以直接添加到递增队列中;            else{                int k=upper_bound(dp,dp+len,a[i])-dp;   //  返回一个非递减序列[first, last)中的第一个大于值val的位置                dp[k]=a[i];                             //  更新数据,方便后期更新;            }        }        printf("%d\n",len);    }    return 0;}


 

0 0
原创粉丝点击