POJ 3903 【最长递增子序列 NLOGN】

来源:互联网 发布:2017最伤感的网络歌曲 编辑:程序博客网 时间:2024/05/12 17:22

由于数据大,常规做法会T。

然后NLOGN的方法小小get了一下。我觉得这种做法如果只是想知道怎么做的话,看代码比看字来的容易懂,但是当然想要知道原理的话还是要去看字呀。

然后自己偷懒并没有去把原理看懂。

#include <stdio.h>#include <iostream>using namespace std;#define maxn 100010int que[maxn];int top;void update(int x){    int l=0,r=top-1;    int mid=(l+r)>>1;    while(l<r)    {        if(x>que[mid]) l=mid+1;        else r=mid;        mid=(l+r)>>1;    }    que[l]=x;}int main(){    int n;    while(scanf("%d",&n)!=EOF)    {        top=0;        int x;        scanf("%d",&x);        que[top++]=x;        for(int i=1;i<n;i++)        {            scanf("%d",&x);            if(x>que[top-1]) que[top++]=x;            else                update(x);        }        printf("%d\n",top);    }    return 0;}


0 0