poj 3903 Stock Exchange

二分查找+dp
不二分会tel的。。
替换之后,本身的顺序没有变,并且本身的体制增强了(可以包含更多的数)
之所以要覆盖,是为了满足二分查找。。

#include<stdio.h>
#include<string.h>
int dp[110010];
int main()
{
    int n;
    int a;
    while(scanf("%d",&n)!=EOF)
    {
        int i;
        int end=0;
        memset(dp,0,sizeof(dp));
        for(i=1;i<=n;i++)
        {
            scanf("%d",&a);
            if(a>dp[end])
                dp[++end]=a;
            if(a<dp[end])
            {
                int left=1;
                int right=end;
                int mid;
                int ans=1;
                while(left<=right)
                {
                    mid=(left+right)/2;
                    if(dp[mid]>a)
                    {
                        ans=mid;
                        right=mid-1;
                    }
                    else if(dp[mid]==a)
                    {
                        ans=mid;
                        break;
                    }
                    else
                    {
                        left=mid+1;
                    }
                }
                dp[left]=a;
            }
        }
        printf("%d\n",end);
    }
}

你可能感兴趣的:(poj,二分-dp)