码迷,mamicode.com
首页 > 其他好文 > 详细

nefu1118 最长上升子序列(LIS)

时间:2016-09-28 22:30:30      阅读:189      评论:0      收藏:0      [点我收藏+]

标签:

discription:定义臻.排序数列如下:一个数列删去其中一个数后是从小到大排好序的,称这个数列为臻.排序数列。现在给你一个数列,判断它是否为臻.排序数列。

intput:多组输入数据,每组有两行,第一行一个整数 n (2<=n<=1000000),第二行有 n 个整数,表示给定的数列

output:如果是臻.排序数列,输出"YES",否则输出"NO"。

simple input:

5

1 2 6 4 5

5

5 4 3 2 1

simple output:

YES

NO

#include<cstdio>
#include<algorithm>
#include<cstring>
#include<cmath>
#include<iostream>
#include<cstdlib>
using namespace std;

int a[1000005],dp[1000005];
int main()
{
    int n,len;
    while(scanf("%d",&n)==1)
    {
        for(int i=1; i<=n; i++)
            scanf("%d",a+i);
        dp[1]=a[1];
        len=1;
        for(int i=2; i<=n; i++)
            if(a[i]>=dp[len]) dp[++len]=a[i];
            else
            {
                int p=lower_bound(dp+1,dp+len+1,a[i])-dp;
                dp[p]=a[i];
            }
        if(len==n-1||len==n) puts("YES");
        else puts("NO");
    }
    return 0;
}

 

 

 

 

 

 

1

nefu1118 最长上升子序列(LIS)

标签:

原文地址:http://www.cnblogs.com/a-clown/p/5917895.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!