首页 > 其他 > 详细

洛谷 AT2827 LIS

时间:2019-12-10 22:04:46      阅读:106      评论:0      收藏:0      [点我收藏+]

题目传送门

解题思路:

用f[i]表示长度为i的最长上升子序列的最小的末尾.

AC代码:

 1 #include<iostream>
 2 #include<cstdio>
 3 #include<algorithm>
 4 
 5 using namespace std;
 6 
 7 int n,a[100001],f[100001],len = 1;
 8 
 9 int main() {
10     scanf("%d",&n);
11     for(int i = 1;i <= n; i++)
12         scanf("%d",&a[i]);
13     f[1] = a[1];
14     for(int i = 1;i <= n; i++)
15         if(a[i] > f[len])
16             f[++len] = a[i];
17         else {
18             int u = lower_bound(f+1,f+len+1,a[i]) - f;
19             f[u] = a[i];
20         }
21     printf("%d",len);
22     return 0;
23 }

 

洛谷 AT2827 LIS

原文:https://www.cnblogs.com/lipeiyi520/p/12019417.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!