poj 1887 Testing the CATCHER

最长不升子序列

不是输出坑爹,是我太粗心。。。。

#include<cstdio>
#include<string>
#include<cstring>
#include<algorithm>
#include<iostream>
using namespace std;
#define maxn 1000010
int a[maxn];
int dp[maxn];
int main()
{
    int cnt=0;
    while(cin>>a[0])
    {
        if(a[0]==-1)
            break;
        a[1]=a[0];
        int num=2;
        while(cin>>a[num])
        {
            if(a[num]==-1)
                break;
            num++;
        }
        int len=1;
        dp[len]=a[1];
        for(int i=2;i<num;i++)
        {
            if(a[i]<=dp[len])
            {
                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("Test #%d:\n",++cnt);
        printf(" maximum possible interceptions: %d\n\n",len);
    }
    return 0;
}

你可能感兴趣的:(poj,LIS)