声明:

正如标题所说,只是求长度,应对题目要求,请自行判断,用错代码概不负责!

本蒟蒻的代码可能有错,有错误还请各位dalao请指出

运用了upper_bound()和lower_bound()函数 upper_bound()查找第一个大于目标的数的地址

lower_bound()查找第一个大于等于目标的数的地址

请注意,注释上面的才是这个注释所对应的代码。

 1 #include<bits/stdc++.h>
2 using namespace std;
3 int y[100];
4 int zs[100],zbx[100],zx[100],zbs[100];
5 //zs 最长上升子序列 zbx最长不下降子序列 zx 最长下降子序列 zbs 最长不上升子序列
6 bool cmp(int a,int b)
7 {
8 return a>b;
9 }//不知道能不能用,尽管测试过没问题,但感觉还是不严谨,不推荐使用
10 int main()
11 {
12 int n;
13 scanf("%d",&n);
14 for(int i=1;i<=n;++i)
15 {
16 scanf("%d",&y[i]);
17 }
18 zs[1]=zbx[1]=zx[1]=zbs[1]=y[1];
19 int cnt=1;
20 for(int i=2;i<=n;++i)
21 {
22 if(y[i]>zs[cnt])
23 {
24 zs[++cnt]=y[i];
25 }
26 else
27 {
28 int p=lower_bound(zs+1,zs+cnt+1,y[i])-zs;
29 zs[p]=y[i];
30 }
31 }
32 printf("%d\n",cnt);//最长上升子序列长度
33 cnt=1;
34 for(int i=2;i<=n;++i)
35 {
36 if(y[i]>=zbx[cnt])
37 {
38 zbx[++cnt]=y[i];
39 }
40 else
41 {
42 int p=upper_bound(zbx+1,zbx+cnt+1,y[i])-zbx;
43 zbx[p]=y[i];
44 }
45 }
46 printf("%d\n",cnt);//最长不下降子序列长度
47 cnt=1;
48 for(int i=2;i<=n;++i)
49 {
50 if(y[i]<zx[cnt])
51 {
52 zx[++cnt]=y[i];
53 }
54 else
55 {
56 int p=lower_bound(zx+1,zx+cnt+1,y[i],greater<int>() )-zx;
57 //int p=lower_bound(zx+1,zx+cnt+1,y[i],cmp )-zx;
58 zx[p]=y[i];
59 }
60 }
61 printf("%d\n",cnt);//最长下降子序列长度
62 cnt=1;
63 for(int i=2;i<=n;++i)
64 {
65 if(y[i]<=zbs[cnt])
66 {
67 zbs[++cnt]=y[i];
68 }
69 else
70 {
71 int p=upper_bound(zbs+1,zbs+cnt+1,y[i],greater<int>() )-zbs;
72 //int p=upper_bound(zbs+1,zbs+cnt+1,y[i],cmp )-zbs;
73 zbs[p]=y[i];
74 }
75 }
76 printf("%d\n",cnt);//最长不上升子序列长度
77 return 0;
78 }

二分法求最长子序列长度(STL)(nlogn)的更多相关文章

  1. 求最长子序列(非连续)的STL方法 - 洛谷P1020 [NOIP1999 普及组] 导弹拦截

    先给出例题:P1020 [NOIP1999 普及组] 导弹拦截 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 大佬题解:P1020 [NOIP1999 普及组] 导弹拦截 - 洛谷 ...

  2. hdu 1950 Bridging signals 求最长子序列 ( 二分模板 )

    Bridging signals Time Limit: 5000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) ...

  3. Cable master 求电缆的最大长度(二分法)

    Description Inhabitants of the Wonderland have decided to hold a regional programming contest. The J ...

  4. hdoj 1950 Bridging signals【二分求最大上升子序列长度】【LIS】

    Bridging signals Time Limit: 5000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) ...

  5. 算法:Common Subsequence(动态规划 Java 最长子序列)

    Description A subsequence of a given sequence is the given sequence with some elements (possible non ...

  6. 题解-洛谷P1020P导弹拦截(求单调序列长度的优化)

    https://www.luogu.org/problemnew/show/P1020 (原题链接) 第一问就是求最长不上升子序列的长度,自然就想到了c++一本通里动态规划里O(n^2)的算法,但题目 ...

  7. JDOJ 1929: 求最长不下降序列长度

    JDOJ 1929: 求最长不下降序列长度 JDOJ传送门 Description 设有一个正整数的序列:b1,b2,-,bn,对于下标i1<i2<-<im,若有bi1≤bi2≤-≤ ...

  8. HDU 4123 (2011 Asia FZU contest)(树形DP + 维护最长子序列)(bfs + 尺取法)

    题意:告诉一张带权图,不存在环,存下每个点能够到的最大的距离,就是一个长度为n的序列,然后求出最大值-最小值不大于Q的最长子序列的长度. 做法1:两步,第一步是根据图计算出这个序列,大姐头用了树形DP ...

  9. 最长递增子序列问题 nyoj 17单调递增最长子序列 nyoj 79拦截导弹

    一,    最长递增子序列问题的描述 设L=<a1,a2,…,an>是n个不同的实数的序列,L的递增子序列是这样一个子序列Lin=<aK1,ak2,…,akm>,其中k1< ...

随机推荐

  1. Spring按业务模块输出日志到不同的文件

    一.背景 在我们开发的过程中,可能存在如下情况: 1.有些时候我们需要调用第三方的接口,一般情况下,调用接口,我们都会记录请求的入参和响应的.如果我们自己系统的日志和第三方的日志混合到一个日志文件中, ...

  2. 154寻找旋转排序数组中的最小值II

    title: 寻找旋转排序数组中的最小值II 题目描述 题目链接:寻找旋转排序数组中的最小值II 解题思路 和上题同理:数组特点有 nums[mid] < nums[right],最小值肯定在m ...

  3. KD-Tree及希尔伯特空间填充曲线的应用

    引言 我们可能会有这样的一种需求,像是打车软件中呼叫附近的车来接送自己,或者是在qq中查看附近的人.我们都需要知道距离自己一定范围内的其它目标的集合.如果将上面举例的功能抽象出来,就是要实现以某个点为 ...

  4. Json序列化与反序列化导致多线程运行速度和单线程运行速度一致问题

    紧跟上篇文章 十个进程开启十个bash后一致写入命令执行完毕之后产生了很多很多的文件,博主需要对这些文件同意处理,也就是说对几十万个文件进行处理,想了又想,单线程处理那么多数据肯定不行,于是乎想到了使 ...

  5. C#/VB.NET 创建图片超链接

    超链接(Hyperlink)可以看做是一个"热点",它可以从当前Web页定义的位置跳转到其他位置,包括当前页的某个位置.Internet.本地硬盘或局域网上的其他文件,甚至跳转到声 ...

  6. 好客租房32-事件绑定this指向(class实例方法)

    class实例方法 利用箭头函数的class实例方法 //导入react import React from 'react'   import ReactDOM from 'react-dom' // ...

  7. 爬取百度页面代码写入到文件+web请求过程解析

    一.爬取百度页面代码写入到文件 代码示例: from urllib.request import urlopen #导入urlopen包 url="http://www.baidu.com& ...

  8. 3000帧动画图解MySQL为什么需要binlog、redo log和undo log

    全文建立在MySQL的存储引擎为InnoDB的基础上 先看一条SQL如何入库的: 这是一条很简单的更新SQL,从MySQL服务端接收到SQL到落盘,先后经过了MySQL Server层和InnoDB存 ...

  9. dotnet-cnblog-tool 图片上传失败问题

    dotnet-cnblog-tools 这个工具是将本地的 Markdown 文件转换为 可以上传到 cnblog 的格式,并且会将图片自动上传到 cnblog 的图床. 具体可以参考这篇文章: cn ...

  10. SQL Server各版本序列号/激活码/License/秘钥

    SQL Server 2019 Enterprise:HMWJ3-KY3J2-NMVD7-KG4JR-X2G8G Enterprise Core:2C9JR-K3RNG-QD4M4-JQ2HR-846 ...