poj 2533 Longest Ordered Subsequence

总算会做nlogn了。。
更改的是内部结构,数目不变。。
就是相当于更合理的替换了以前的。。
别人博客写的很好的代码:http://blog.sina.com.cn/s/blog_76344aef0100scyq.html
以及别人很详细的思路:http://blog.csdn.net/dangwenliang/article/details/5728363
自己看了这两个理解了。。
在这里谢谢他们。。

附上自己写的。。

#include<stdio.h>
#include<string.h>
#define maxn 1010
int a[maxn];
int dp[maxn];
int main()
{
    int n;
    while(scanf("%d",&n)!=EOF)
    {
        for(int i=1;i<=n;i++)
            scanf("%d",&a[i]);
        a[0]=-0x3f3f3f3f;
        dp[0]=-0x3f3f3f3f;
        int len=0;
        for(int i=1;i<=n;i++)
        {
            int left=1;
            int right=len;
            if(a[i]>dp[len])
                dp[++len]=a[i];
            else
            {
                int left=1;
                int right=len;
                int mid;
                while(left<=right)
                {
                    mid=(left+right)/2;
                    if(dp[mid]>a[i])
                    {
                        right=mid-1;
                    }
                    else
                    {
                        left=mid+1;
                    }
                }
                dp[left]=a[i];
            }
        }
        printf("%d\n",len);
    }
    return 0;
}

你可能感兴趣的:(dp)