最长严格上升子序列

来源:互联网 发布:nginx grpc 编辑:程序博客网 时间:2024/05/01 22:27

提交:codevs3955
题目↑↑

这道题是最长上升子序列的加强版,这道题的数据比一般的最长上升子序列要大,所以一般的算法O(n^2)会超时

所以这道题用一种贪心算法(师兄讲评)
这种算法的时间复杂度为O(n logn)

代码↓↓

#include<cstdio>#include<cstring>#include<cstdlib>#include<algorithm>using namespace std;int b[1100000];int erfen(int l,int r,int d){    int mid,ans;    while(l<=r)    {        mid=(l+r)/2;        if(b[mid]>=d)        {            r=mid-1;            ans=mid;        }        else        {            l=mid+1;        }    }    return ans;}int main(){    int n;    scanf("%d",&n);    int len=0;    memset(b,0,sizeof(b));    for(int i=1;i<=n;i++)    {        int x;        scanf("%d",&x);        if(x>b[len]||len==0)        {            b[++len]=x;        }        else        {            int tt=erfen(1,len,x);            b[tt]=min(x,b[tt]);        }    }    printf("%d\n",len);    return 0;}
0 0
原创粉丝点击