二分法求最长子序列长度(STL)(nlogn)
声明:
正如标题所说,只是求长度,应对题目要求,请自行判断,用错代码概不负责!
本蒟蒻的代码可能有错,有错误还请各位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)的更多相关文章
- 求最长子序列(非连续)的STL方法 - 洛谷P1020 [NOIP1999 普及组] 导弹拦截
先给出例题:P1020 [NOIP1999 普及组] 导弹拦截 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 大佬题解:P1020 [NOIP1999 普及组] 导弹拦截 - 洛谷 ...
- hdu 1950 Bridging signals 求最长子序列 ( 二分模板 )
Bridging signals Time Limit: 5000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) ...
- Cable master 求电缆的最大长度(二分法)
Description Inhabitants of the Wonderland have decided to hold a regional programming contest. The J ...
- hdoj 1950 Bridging signals【二分求最大上升子序列长度】【LIS】
Bridging signals Time Limit: 5000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) ...
- 算法:Common Subsequence(动态规划 Java 最长子序列)
Description A subsequence of a given sequence is the given sequence with some elements (possible non ...
- 题解-洛谷P1020P导弹拦截(求单调序列长度的优化)
https://www.luogu.org/problemnew/show/P1020 (原题链接) 第一问就是求最长不上升子序列的长度,自然就想到了c++一本通里动态规划里O(n^2)的算法,但题目 ...
- JDOJ 1929: 求最长不下降序列长度
JDOJ 1929: 求最长不下降序列长度 JDOJ传送门 Description 设有一个正整数的序列:b1,b2,-,bn,对于下标i1<i2<-<im,若有bi1≤bi2≤-≤ ...
- HDU 4123 (2011 Asia FZU contest)(树形DP + 维护最长子序列)(bfs + 尺取法)
题意:告诉一张带权图,不存在环,存下每个点能够到的最大的距离,就是一个长度为n的序列,然后求出最大值-最小值不大于Q的最长子序列的长度. 做法1:两步,第一步是根据图计算出这个序列,大姐头用了树形DP ...
- 最长递增子序列问题 nyoj 17单调递增最长子序列 nyoj 79拦截导弹
一, 最长递增子序列问题的描述 设L=<a1,a2,…,an>是n个不同的实数的序列,L的递增子序列是这样一个子序列Lin=<aK1,ak2,…,akm>,其中k1< ...
随机推荐
- 详解计算miou的代码以及混淆矩阵的意义
详解计算miou的代码以及混淆矩阵的意义 miou的定义 ''' Mean Intersection over Union(MIoU,均交并比):为语义分割的标准度量.其计算两个集合的交集和并集之比. ...
- 定时 ——setTimeout | setInterval
使用场景,setTimeout 只调用一次,setInterval 会重复调用,直到清除或重载. <div id="countDown"></div> &l ...
- 批量上传文件或者上传大文件时 gateWay报错DataBufferLimitException: Exceeded limit on max bytes to buffer : 262144
一.描述 最近在批量上传文件时网关出现了异常,后面发现上传大文件也会出现文件超过256发生异常,异常信息如下: org.springframework.core.io.buffer.DataBuffe ...
- wsgiref模块、web框架、django框架简介
"""web框架:将前端.数据库整合到一起的基于互联网传输的python代码 web框架也可以简单的理解为是软件开发架构里面的'服务端'""" ...
- KLOOK客路旅行基于Apache Hudi的数据湖实践
1. 业务背景介绍 客路旅行(KLOOK)是一家专注于境外目的地旅游资源整合的在线旅行平台,提供景点门票.一日游.特色体验.当地交通与美食预订服务.覆盖全球100个国家及地区,支持12种语言和41种货 ...
- nginx1.1 nginx介绍和反向代理
1.什么是nginx nginx是一个高性能的http和反向代理的web服务器,所占内存小,高并发 nginx默认端口:80端口 命令存放目录:cd /usr/local/nginx/sbin 配置文 ...
- 关于『进击的Markdown』:第二弹
关于『进击的Markdown』:第二弹 建议缩放90%食用 众里寻他千百度,蓦然回首,Markdown却在灯火灿烂处 MarkdownYYDS! 各位早上好! 我果然鸽稿了 Markdown 语法 ...
- VBA驱动SAP GUI实现办公自动化(一)
小爬之前写过一系列Python驱动SAP GUI实现办公自动化的文章,其实如果我们的实际业务不是太复杂,且我们对VBA语法比较熟悉的话,我们完全可以借助Excel VBA来驱动SAP GUI做很多自动 ...
- ExtJS 布局-Auto布局(Auto Layout)
更新记录 2022年5月30日 开启本篇 1.说明 auto布局是大部分容器默认的布局类型. auto布局通常是从上到下进行堆叠,auto布局不会设置子组件的宽度,默认与容器一样的宽度. 类似于HTM ...
- 打字练习-编程语言关键字系列-java
小编整理的java关键字,内容如下:abstract, assert, boolean, break, byte, case, catch, char, class, const, continue, ...