7-5 快乐的尽头 (17 分)

题目

快乐风男面前有n个兵,呈线性排列编号为1~n,每个小兵携带a[i]个金币1<=i<=1e5,为了体现快乐的极致,快乐风男知道了每个小兵携带的金币,快乐的他E往无前(也就是说他不会回头),但是快乐的他每次e的小兵的金币都严格递增,为了他能快乐多一点,请你给出他e兵的方案(上升子序列下标 如样例最长上升子序列为1 2 3 4 ,你需要输出其对应的下标1 2 3 5),让他e的兵越多越好,如果有多个快乐方案,给出字典序最小1<=n<=100000
(由于原数据未分组,现在不需要读入T,即每个数据一个案例)

输入格式

第一行输入n表示有n个小兵 第二行为每个小兵的携带金币

输出格式

第一行给出快乐风男可以e的最大兵数,第二行给出最佳方案

输入样例

5
1 2 3 3 4

输出样例

4
1 2 3 5

基本思路

这题的主要分为两部分来看待。
第一部分是利用 贪心+二分法对初始序列的每个元素进行处理。(这一步模板化,不难)
这个模板下面这篇文章介绍的很详细,可以先看一看,传送门:
添加链接描述

第二部分是利用已有的信息倒推得出具体的LIS。(这一步很难理解,感觉也是这道题目的精髓所在)
可以先看我的代码和代码注释(比较详细),基础比较好的同学应该还是能够理解的。

代码

#include <iostream>
#include <cstring>
#include <algorithm>
using namespace std;
const int INF = 0x3f3f3f3f;
int maxLength;//最长递增子序列的长度
int a[100001];//初始序列
int greedy[100001];//greedy[i]存放长度为i的LIS的结尾元素的最小值。初始化为INF
int posInLIS[100001];//下标为a[i]的下标i,值为如果a[i]被选中(作为LIS的一部分),那么它在LIS中的位置
int firstAppear[100001];
int ans[100001];//下标表示LIS中第几个位置,值表示该位置上的元素在数组a中的下标
int main() {//读入初始序列aint n;cin >> n;for (int i = 1; i <= n; i++)cin >> a[i];//初始化数组greedymemset(greedy, INF, sizeof(greedy));//枚举a[i]从a[1]到a[n]for (int i = 1; i <= n; i++){//在数组greedy中找到第一个大于等于a[i]元素的下标int indexInGreedy = lower_bound(greedy + 1, greedy + n + 1, a[i]) - greedy;//如果indexInGreedy为数组greedy最后一个元素的后一个位置下标,更新maxLengthif (greedy[indexInGreedy] == INF)maxLength++;//a[i]放到数组greedy的最后一个元素的后一个位置indexInGreedy//a[i]覆盖原有的greedy[indexInGreedy]greedy[indexInGreedy] = a[i];//posInLIS[i]表示a[i]的indexInGreedy(如果a[i]被选中(作为LIS的一部分),那么它在LIS中的位置)posInLIS[i] = indexInGreedy;/*firstAppear[indexInGreedy]记录第一个计算结果为indexInGreedy的a[i]的下标i用来求得最终的LIS的结尾元素在数组a中的下标*/if (!firstAppear[indexInGreedy])firstAppear[indexInGreedy] = i;}//求出最终的LIS的每个元素在数组a中的下标ans[maxLength] = firstAppear[maxLength];for (int indexIna = firstAppear[maxLength] - 1; indexIna >= 1; indexIna--) {if (a[indexIna] < a[ans[posInLIS[indexIna] + 1]])ans[posInLIS[indexIna]] = indexIna;}//输出cout<<maxLength<<endl;for(int i=1;i<=maxLength;i++)cout<<(i==1?"":" ")<<ans[i];return 0;
}

7-5 快乐的尽头 (17 分)相关推荐

  1. 7-1 真实的背包故事 (17 分)

    7-1 真实的背包故事 (17 分) 题目大意 0-1背包问题是经典的动态规划问题,这个问题大多用这样的故事开场:一个小偷溜进了一家博物馆,博物馆里排列着N件珍稀古董,每件古董都有重量和价值,而小偷带 ...

  2. 7-4 计算税率 (17 分)

    7-4 计算税率 (17 分) 美国联邦个人所得税是根据申报情况和应纳税所得额计算的.有四种申报情况:单身申报.已婚联合申报.已婚单独申报.户主申报.税率每年都不一样.下表即为假定税率计算方法,例如, ...

  3. PAT_B_1065_Java(17分)_C++(25分)

    import java.io.*; import java.util.*;public class Main {public static void main(String[] args) throw ...

  4. 蓝桥杯——测试次数·摔手机(2018JavaB组第4题,17分)

    x星球的居民脾气不太好,但好在他们生气的时候唯一的异常举动是:摔手机. 各大厂商也就纷纷推出各种耐摔型手机.x星球的质监局规定了手机必须经过耐摔测试,并且评定出一个耐摔指数来,之后才允许上市流通. x ...

  5. 7-14 解一元一次方程 (17 分)

    请编写程序,解一元一次方程,ax+b=0. 一元一次方程求解公式为:x=−ab​ 求解要求: ⋄ a=0, 方程有唯一解,输出解: ⋄ a=0,b=0, 方程无解,输出no solution ⋄  ...

  6. 17岁成研究生,20岁被劝退,38岁“神童”离世

    点击上方"视学算法",选择加"星标"或"置顶" 重磅干货,第一时间送达 本文来源:上观新闻.潇湘晨报.都市快报 11月17日 记者从&quo ...

  7. python秒转换成小时分钟秒_1小时3分59秒!双11天猫交易额超1000亿元

    新浪科技讯 11月11日凌晨消息,第十一届阿里巴巴天猫双11于今日凌晨正式打响.据双11实时交易数据显示,1小时3分59秒,交易额达到1000亿.去年实现这一成绩耗时1小时47分26秒! 2019年双 ...

  8. 技术问答集锦(17)JVM垃圾回收

    1 判断对象是否可回收有几种方式? 引用计数算法 优点:实现简单,判定高效: 缺点:很难解决对象之间相互循环引用的问题: 可达性分析算法 通过一系列"GC Roots"对象作为起始 ...

  9. 16小时31分12秒!2019天猫双11成交额超2135亿元,超越2018年全天成交额

    11月11日消息,根据阿里巴巴实时数据显示, 16时31分12秒,2019天猫双11成交额超过人民币2135亿元,超越2018年全天成交额. 与此同时,菜鸟网络数据显示,仅用16小时33分钟,2019 ...

最新文章

  1. Python使用pandas设置数据列中float数据类型的有效小数位数、抑制科学计数法
  2. 用了那么多年的 Master 分支或因种族歧视而成为历史?
  3. nrf52840开发套件_nRF52840蓝牙5.0模块有几个突出的优势
  4. finereport 登录界面的代码文件_【干货下载】多彩包含网页登录界面等4款WEB模板素材作品集源文件...
  5. iOS常用于显示几小时前/几天前/几月前/几年前的代码片段
  6. linux下安装win xp 进pe出错,PE安装原版XP系统(含高版本PE安装选项灰色处理办法)...
  7. c++实现顺序表的相关操作
  8. HDU 3785 寻找大富翁(sort排序或优先队列)
  9. String方法(一)
  10. JQueryDOM之插入节点
  11. 20155307 刘浩 信息安全技术(李冬冬) 实验三 数字证书应用 实验报告
  12. web压力测试工具比较
  13. 鸿蒙电视rom,华为鸿蒙os刷机包
  14. 基于Simulink的汽车电子驻车系统仿真分析
  15. 触摸屏学习:利用状态机编程
  16. c语言 约分最简分式
  17. Daydream播放3D视频(视频左右分屏3D效果)
  18. 消除“Permission is only granted to system apps”错误
  19. IDEA 自定义代码模板
  20. 多可知识管理系统中的文件密级

热门文章

  1. GcExcel for java 6.0 简单例子 -jar has been cracked
  2. 2021-02-09-今日K8S环境搭建记录
  3. 转载 tiny6410 使用rt5370 usb无线网卡
  4. KV260编译SmartCam应用
  5. 浙江大学教授郑强的经典语录
  6. Linux 基础上篇
  7. android硬件加速默认,android 硬件加速
  8. 2017 ccpc网络预选赛 CaoHaha's staff
  9. 网络综合测试仪 都具备什么功能
  10. android基本功