1. #include<iostream>
  2. #include<algorithm>
  3. #include<vector>
  4. using namespace std;
  5. int main(void) {
  6. int n;
  7. cin >> n;
  8. vector<int>arr(n);
  9. for (int i = ; i < n; ++i)
  10. cin >> arr[i];
  11. vector<int>stk;//模拟堆栈
  12. stk.push_back(arr[]);
  13. for (int i = ; i < n; ++i) {
  14. if (arr[i] > stk.back())//如果该元素大于栈顶元素,将该元素入栈
  15. stk.push_back(arr[i]);
  16. else//替换掉第一个大于或者等于这个数字的那个数
  17. *lower_bound(stk.begin(), stk.end(), arr[i]) = arr[i];
  18. }
  19. cout << stk.size() << endl;
  20. return ;
  21. }
  1. #include <iostream>
  2. #include <algorithm>
  3. using namespace std;
  4. const int N = ;
  5. int n;
  6. int a[N];
  7. int q[N];//所有不同长度下上升序列的结尾的最小值(也就是,第一个数的最小)
  8. int main() {
  9. scanf("%d", &n);
  10. for (int i = ; i < n; i ++ ) scanf("%d", &a[i]);
  11. int len = ;//q里面的元素个数 ,最开始为0,一个都没有
  12. q[] = -2e9;
  13. for (int i = ; i < n; i ++ ) {//枚举每个数字
  14. int l = , r = len;
  15. while (l < r) { //二分出来小于a[i] 之前的 数字中最大的数字
  16. int mid = l + r + >> ;
  17. if (q[mid] < a[i]) l = mid;
  18. else r = mid - ;
  19. }
  20. len = max(len, r + );//r找的是可以接在哪个长度的后面
  21. q[r + ] = a[i];
  22. }
  23. printf("%d\n", len);
  24. return ;
  25. }

AcWing 896. 最长上升子序列 II的更多相关文章

  1. AcWing 895. 最长上升子序列

    //设上升序列的最后一个数字为第i个,那么就以第i-1个位分类标准, //i-1可以没有,也可以是在数组中下标为1,下标为2 //一直到下标为i-1的数字 #include <iostream& ...

  2. AcWing 897. 最长公共子序列

    #include <iostream> #include <algorithm> using namespace std; ; int n, m; char a[N], b[N ...

  3. lintcode 最长上升连续子序列 II(二维最长上升连续序列)

    题目链接:http://www.lintcode.com/zh-cn/problem/longest-increasing-continuous-subsequence-ii/ 最长上升连续子序列 I ...

  4. Java实现 LeetCode 522 最长特殊序列 II(查找最长的非子序列的长度)

    522. 最长特殊序列 II 给定字符串列表,你需要从它们中找出最长的特殊序列.最长特殊序列定义如下:该序列为某字符串独有的最长子序列(即不能是其他字符串的子序列). 子序列可以通过删去字符串中的某些 ...

  5. UVA10599:Robots(II)(最长上升子序列)

    Your company provides robots that can be used to pick up litter from fields after sporting events an ...

  6. [ACM] hdu 1025 Constructing Roads In JGShining's Kingdom (最长递增子序列,lower_bound使用)

    Constructing Roads In JGShining's Kingdom Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65 ...

  7. P1439 【模板】最长公共子序列

    题目描述 给出1-n的两个排列P1和P2,求它们的最长公共子序列. 输入输出格式 输入格式: 第一行是一个数n, 接下来两行,每行为n个数,为自然数1-n的一个排列. 输出格式: 一个数,即最长公共子 ...

  8. [HAOI2007]上升序列(最长上升子序列)

    题目描述 对于一个给定的 S=\{a_1,a_2,a_3,…,a_n\}S={a1​,a2​,a3​,…,an​} ,若有 P=\{a_{x_1},a_{x_2},a_{x_3},…,a_{x_m}\ ...

  9. HDOJ1025(最长上升子序列)

    Constructing Roads In JGShining's Kingdom Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65 ...

随机推荐

  1. [SDOI2010]粟粟的书架 [主席树]

    [SDOI2010]粟粟的书架 考虑暴力怎么做 显然是提取出来 (x2-x1+1)*(y2-y1+1) 个数字拿出来 然后从大到小排序 然后就可以按次取数了- 然而接下来看数据范围 \(50\%\ r ...

  2. 文件流之输入输出(类似于freopen重定向)

    利用标准文件操作函数进行数据的输入输出,所用函数均在stdio.h中,类似于freopen重定向文件. 该方法的思路是: (1)建立文件指针 (2)打开文件,将文件指针指向打开的文件,并决定打开的文件 ...

  3. Excel时间格合并(年月日+时间点)

    =value(a1)+b2 日期 时间 合并 2018/8/8 14:13 2018/8/8 14:13:00      

  4. JavaDay9(下)

    Java learning_Day9(下) 本人学习视频用的是马士兵的,也在这里献上 <链接:https://pan.baidu.com/s/1qKNGJNh0GgvlJnitTJGqgA> ...

  5. xctf进阶-unserialize3反序列化

    一道反序列化题: 打开后给出了一个php类,我们可以控制code值: `unserialize()` 会检查是否存在一个 `__wakeup()` 方法.如果存在,则会先调用 `__wakeup` 方 ...

  6. Turtle模块基本方法和使用(画布)

      方法 简写 描述 例子 移动和绘制 forward() fd() 前进 turtle.forward(10):前进10个单位 backward() bk().back() 后退 turtle.ba ...

  7. hadoop基本组件原理小总结

    Hadoop基础知识小总结  这是本人(学生党)在学习hadoop半个学期后根据教科书后习题做的一个小总结,如有发现错误还请各位海涵并指出,我会及时改过来的,谢谢! 目录 Hadoop基础知识小总结. ...

  8. css动画 transition

    比如输入框触交渐变 在原来的属性添加 : .form-control{-webkit-transition: all .3s; transition: all .3s;} .form-control: ...

  9. Windows里面的虚拟机,部署的项目在同一网段也可以访问到

    一直想对自己Linux里面部署的项目进行再同一网段进行共享让其他和我同网段的人都看到 今天对于这个问题我终于解决了 首先编辑自己的虚拟机 进行虚拟机网络编辑 选择VMnet8 然后进行下面的NET设置 ...

  10. CSS的display显示

    CSS的display显示 1. 行内元素和块级元素关系 块级元素:1.标题标签:h1~h6:2.段落标签:p1~p6:3.div:4.列表:等 行内元素:1.span:2.a:3.img:4.str ...