声明:

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

本蒟蒻的代码可能有错,有错误还请各位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. 一行代码如何隐藏 Linux 进程?

    开源Linux 长按二维码加关注~ 上一篇:IPv6技术白皮书(附PDF下载) 总有朋友问隐藏Linux进程的方法,我说你想隐藏到什么程度,是大隐于内核,还是小隐于用户.网上通篇论述的无外乎 hook ...

  2. 【原创】记一次对X呼APP的渗透测试

    获取CMS并本地安装 X呼是一款开源的客服CMS系统,访问官网,下载安卓版本的app和源码本地搭建: 发现这cms预留admin表中的用户就不少.... 直接用预留的密码解密,然后就能登录手机APP了 ...

  3. 隐藏浏览器header中X-Powered-By: PHP信息

    在php程序中,默认会在http请求响应头中输出php版本信息.如下: HTTP/1.1 200 OK Content-Type: text/html; charset=utf-8 Date: Tue ...

  4. Focal and Global Knowledge Distillation for Detectors

    一. 概述 论文地址:链接 代码地址:链接 论文简介: 此篇论文是在CGNet上增加部分限制loss而来 核心部分是将gt框变为mask进行蒸馏 注释:仅为阅读论文和代码,未进行试验,如有漏错请不吝指 ...

  5. 如何使用Python实现图像融合及加法运算?

    摘要:本篇文章主要讲解Python调用OpenCV实现图像融合及加法运算,包括三部分知识:图像融合.图像加法运算.图像类型转换. 本文分享自华为云社区<[Python图像处理] 五.图像融合.加 ...

  6. Git拉取远程新分支

    1.查看本地分支  git branch 2.查看远程分支  git branch -a 3.如果要拉取的远程分支本地没有 git fetch 4.拉取远程新分支到本地 git checkout -b ...

  7. Springboot启动类及注解说明

    Spring boot的启动是基于main方法的,其主要注解为: 1. @springBootApplication:项目的启动注解,是一个组合注解,包含@SpringbootConfiguratio ...

  8. # k8s-jenkins在kubernetes中持续部署

    k8s-jenkins在kubernetes中持续部署 1. k8s-jenkins在kubernetes中持续部署 Kubernetes Continuous Deploy插件:用于将资源配置部署到 ...

  9. 【单片机】使用 sscanf 提取AT命令返回结果中的有效数据

    摘要:1. sscanf函数 sscanf是C标准库函数,用于从字符串中读取格式化输入. 头文件: #include <stdio.h>函数原型如下: int sscanf(const c ...

  10. PostgreSQL 和 MySQL 在用途、好处、特性和特点上的异同

    PostgreSQL 和 MySQL 在用途.好处.特性和特点上的异同. PostgreSQL 和 MySQL 是将数据组织成表的关系数据库.这些表可以根据每个表共有的数据链接或关联.关系数据库使您的 ...