怪盗基德的滑翔翼(最长上升子序列)「建议收藏」

怪盗基德的滑翔翼(最长上升子序列)「建议收藏」最长上神子序列(nlogn)原题链接怪盗基德是一个充满传奇色彩的怪盗,专门以珠宝为目标的超级盗窃犯。而他最为突出的地方,就是他每次都能逃脱中村警部的重重围堵,而这也很大程度上是多亏了他随身携带的便于操作的滑翔翼。有一天,怪盗基德像往常一样偷走了一颗珍贵的钻石,不料却被柯南小朋友识破了伪装,而他的滑翔翼的动力装置也被柯南踢出的足球破坏了。不得已,怪盗基德只能操作受损的滑翔翼逃脱。假设城市中一共有N幢建筑排成一条线,每幢建筑的高度各不相同。初始时,怪盗基德可以在任何一幢建筑的顶端。他可以选择一个

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

最长上神子序列(nlogn)

原题链接
怪盗基德是一个充满传奇色彩的怪盗,专门以珠宝为目标的超级盗窃犯。

而他最为突出的地方,就是他每次都能逃脱中村警部的重重围堵,而这也很大程度上是多亏了他随身携带的便于操作的滑翔翼。

有一天,怪盗基德像往常一样偷走了一颗珍贵的钻石,不料却被柯南小朋友识破了伪装,而他的滑翔翼的动力装置也被柯南踢出的足球破坏了。

不得已,怪盗基德只能操作受损的滑翔翼逃脱。

假设城市中一共有N幢建筑排成一条线,每幢建筑的高度各不相同。

初始时,怪盗基德可以在任何一幢建筑的顶端。

他可以选择一个方向逃跑,但是不能中途改变方向(因为中森警部会在后面追击)。

因为滑翔翼动力装置受损,他只能往下滑行(即:只能从较高的建筑滑翔到较低的建筑)。

他希望尽可能多地经过不同建筑的顶部,这样可以减缓下降时的冲击力,减少受伤的可能性。

请问,他最多可以经过多少幢不同建筑的顶部(包含初始时的建筑)?

输入格式
输入数据第一行是一个整数K,代表有K组测试数据。

每组测试数据包含两行:第一行是一个整数N,代表有N幢建筑。第二行包含N个不同的整数,每一个对应一幢建筑的高度h,按照建筑的排列顺序给出。

输出格式
对于每一组测试数据,输出一行,包含一个整数,代表怪盗基德最多可以经过的建筑数量。

数据范围
1≤K≤100,
1≤N≤100,
0<h<10000
输入样例:

3
8
300 207 155 299 298 170 158 65
8
65 158 170 298 299 155 207 300
10
2 1 3 4 5 6 7 8 9 10

输出样例:

6
6
9
#include<bits/stdc++.h>
#define x first
#define y second
#define send string::nops
using namespace std;
typedef long long ll;
const int N = 1e4 + 10;
const int M = 3 * N;
const int INF = 0x3f3f3f3f;
typedef pair<int,int> PII;
vector<int> fup,fdown,a;
int len_up,len_down;
int main(){ 

int T,n,x;
cin>>T;
while(T --){ 

cin>>n;
a.clear();
fup.clear();
fdown.clear();
for(int i = 0;i < n;i ++){ 

cin>>x;
a.push_back(x);
}
for(int i = 0;i < n;i ++){ 

if(i == 0){ 

fup.push_back(a[i]);
continue;
}
int pox = upper_bound(fup.begin(),fup.end(),a[i]) - fup.begin();
// cout<<pox<<endl;
if(pox != fup.size())fup[pox] = a[i];
else fup.push_back(a[i]);
}
reverse(a.begin(),a.end());
for(int i = 0;i < n;i ++){ 

if(i == 0){ 

fdown.push_back(a[i]);
continue;
}
int pox = upper_bound(fdown.begin(),fdown.end(),a[i]) - fdown.begin();
if(pox != fdown.size())fdown[pox] = a[i];
else fdown.push_back(a[i]);
}
cout<<max(fdown.size(),fup.size())<<endl;
}
}
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/168922.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • Eclipse下载与安装教程(最简单版)「建议收藏」

    Eclipse下载与安装教程(最简单版)「建议收藏」这是最新,最简单的Eclipse下载与安装教程,希望对各位有所帮助。

  • Android应用程序开发以及背后的设计思想深度剖析

    Android应用程序开发以及背后的设计思想深度剖析原文链接:http://www.uml.org.cn/mobiledev/201211063.asp#2初步过了一下,很多地方写得还是比较深入的,先转载,后面再仔细看看。 本文内容,主题是透过应用程序来分析Android系统的设计原理与构架。我们先会简单介绍一下Android里的应用程序编程,然后以这些应用程序在运行环境上的需求来分析出,为什么我们的Android系统需要今天这样的设

  • Linux基础:systemctl和journalctl常用命令「建议收藏」

    Linux基础:systemctl和journalctl常用命令「建议收藏」systemctl介绍Systemctl是一个systemd工具,主要负责控制systemd系统和服务管理器。重要:Systemctl接受服务(.service),挂载点(.mount),套接字(.socket)和设备(.device)作为单位。systemctl常用命令Systemd的版本systemd–versionsystemd和systemctl的二…

  • 网站接入微信扫码登录并获取用户基本信息(微信开放平台)

    网站接入微信扫码登录并获取用户基本信息(微信开放平台)现在的网站基本都接入微信登陆了,就好像下面这样的。只需要用微信扫一下二维码,这个网站就可以展示你的微信昵称和头像,免去注册账号和输入密码登录的步骤,还免去设置头像和昵称的步骤,所以是挺方便的。那么如何把自己的网站接入这个呢?首先咱们得先在微信开放平台注册账号并且创建一个网站应用,等待审核通过后就可以获得Appid和AppSecretbingqie并且还要设置回调域名,这个不多说。首…

  • Win7系统解决无法打开任务管理器「建议收藏」

    Win7系统解决无法打开任务管理器「建议收藏」Win7系统解决无法打开任务管理器有时候在使用Win7系统过程中会出现无法打开任务管理器的情况,以下内容给出几种常见的打开任务管理器的方式以及无法启动任务管理器时的简单解决方案。Win7系统解决无法打开任务管理器常用打开任务管理器的方式一、快捷键方式二、命令行方式解决方案常用打开任务管理器的方式一、快捷键方式Ctrl+Alt+DelCtrl…

  • Ubuntu 14.04 LTS系统中配置Apache2虚拟主机[通俗易懂]

    Ubuntu 14.04 LTS系统中配置Apache2虚拟主机[通俗易懂]在Ubuntu14.04LTS系统中设置Apache虚拟主机1.安装用下面命令来安装apache网络服务器:$sudoapt-getinstallapache22.检查是否安装成功安装apache服务器之后,让我们通过这个URLhttp://你的服务器的IP地址/来测试网站服务器是否正常工作如果出现“ItWorked!”的示例页,说明apache服务器已经开始工作了3.

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号