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

怪盗基德的滑翔翼(最长上升子序列)「建议收藏」最长上神子序列(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;
    }
}

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

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

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • Oracle 中的视图理解

    Oracle 中的视图理解

    2021年8月19日
    69
  • c语言实现fastcgi

    c语言实现fastcgi参考fastcgi官网使用fastcgi官网迁移到了github了,下载FastCGIDeveloper’sKit

    2022年7月11日
    26
  • 百度云BAE3.0 的ssh构造(本机ssh项目迁移到BAE3.0)

    百度云BAE3.0 的ssh构造(本机ssh项目迁移到BAE3.0)

    2022年1月11日
    49
  • SpringBoot 快速开启事务(附常见坑点)「建议收藏」

    做一个积极的人编码、改bug、提升自己我有一个乐园,面向编程,春暖花开!序言:此前,我们主要通过XML配置Spring来托管事务。在SpringBoot则非常简单,只需在业务层添加事务注解(@Transactional )即可快速开启事务。虽然事务很简单,但对于数据方面是需要谨慎对待的,识别常见坑点对我们开发有帮助。1.引入依赖 <!–依赖管理 …

    2022年2月28日
    61
  • java分布式事务框架_Java分布式事务,及解决方案

    java分布式事务框架_Java分布式事务,及解决方案1、什么是分布式事务分布式事务就是指事务的参与者、支持事务的服务器、资源服务器以及事务管理器分别位于不同的分布式系统的不同节点之上。以上是百度百科的解释,简单的说,就是一次大的操作由不同的小操作组成,这些小的操作分布在不同的服务器上,且属于不同的应用,分布式事务需要保证这些小操作要么全部成功,要么全部失败。本质上来说,分布式事务就是为了保证不同数据库的数据一致性。2、分布式事务的产生的原因2.1、…

    2022年5月4日
    66
  • 开心农场外挂助手_开心农场最新版本下载

    开心农场外挂助手_开心农场最新版本下载开心农场外挂助手,支持校内开心农场、校内开心农民、QQ校友开心农场、开心网001花园、开心网农场作用:1、自动倒计时,到朋友作物即将成熟前提醒你。2、不会错过好友的任何一个水果。偷东西一个都不会少。3、时间支持小时的输入;支持关机倒计时。4、支持自定义声音提醒、图标闪烁提醒使用方法:1、添加数据:直接在表格里填写好友标记、时间(分,最近成熟时间)2、添加完毕后,可最小化(就是X按钮)。去干其他事情…

    2025年11月10日
    3

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

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