nefu1118 最长上升子序列(LIS)
Posted a_clown_cz
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了nefu1118 最长上升子序列(LIS)相关的知识,希望对你有一定的参考价值。
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)的主要内容,如果未能解决你的问题,请参考以下文章