题目描述
强迫症小h在整理书库,准备把书全部摆放在书桌上,摆放若干堆。

小h要求:书桌上的每堆书必须按照书本厚度从小到到大排序(也就是每堆书下面的不能比上面的薄,可以一样)。

小h会从书库里一本一本地拿书出来,然后进行摆放,请问小h最少需要摆放多少堆,才能摆好所有书籍。
输入
第一行一个整数,表示书库书本总数量(1≤n≤10^5)
第二行个整数,表示书本厚度(1≤ai≤30000)
输出
输出一个整数,表示小h最少需要摆放堆数。
样例输入
8
389 207 155 300 299 170 158 65
样例输出
2
提示
最少需要摆放两堆

第一堆:398-207-155-65

第二堆:300-299-170-158

分析:这一题就是我的文章,《记录我的拉胯时刻》的文章中提及的,一道稍微进阶的最长递增子序列的模板题。
先分析复杂度!n^5,如果我们直接使用朴素的求解最长递增子序列的方法,复杂度为O(n^2),很显然是会超时的。
现在转念一想,当初学的利用二分的求解LIS的方法的真正用意了,这个复杂度是O(nlogn),是不会超时的。
思路是这样的:

按照题目要求的来走,我们的每一堆书都满足最长非严格递减子序列,转念一想,用贪心的思想去思考,我们可以开出一个数组ans用来存储每一个最长非严格递减子序列的最小元素。因此当我们遍历我们输入的内容的时候,当此时的数可以在ans数组里面找到比他更大的或者相等的,那么就替代ans中的这个数。(注意,在ans数组里面找到的比该元素大的数可能不止一个,但是我们要选择最小的一个,这样符合贪心的思想,才能使得一叠书更厚,也就间接使得书的堆数减少了,是不是感觉很想用lower_bound函数?);而当我们在ans中无法找到比此数更大的数了,怎么办?很明显,无论哪一叠书,我们都没办法放上去,因此自成一派,成为一堆书。这就是运用了贪心的思想。

代码如下:

#include<bits/stdc++.h>
using namespace std;
int ans[10005],len;
int main(){int n,a;cin>>n;while(n--){scanf("%d",&a);int id=lower_bound(ans,ans+len,a)-ans;if(id<len)ans[id]=a;else ans[len++]=a;}printf("%d\n",len);
}

HNUCM 1985: 小h的书桌相关推荐

  1. 小H和游戏(无根树转有根树,思维)难度⭐⭐⭐★

    链接:https://ac.nowcoder.com/acm/contest/5203/D 来源:牛客网 题目描述 小H正在玩一个战略类游戏,她可以操纵己方的飞机对敌国的N座城市(编号为1~N)进行轰 ...

  2. 牛客Wannafly挑战赛10 A.小H和迷宫

    链接:https://www.nowcoder.com/acm/contest/72/A 来源:牛客网 题目描述 小H陷入了一个迷宫中,迷宫里有一个可怕的怪兽,血量有N点,小H有三瓶魔法药水,分别可以 ...

  3. 科林明伦杯哈尔滨理工大学第八届程序设计竞赛——Hrbust-2378 小H的问题(模拟)

    Description 小H是一个可爱的女孩,她特别喜欢看推特(tweeter).有一天她得到了某位用户的一些推特消息,想从中提取出这个用户在这些消息中@了哪些人.但是这些消息太长了,她想请你来帮她完 ...

  4. 小 H 的数字c++

    题目描述 小 H 有一天突发奇想,写下了一串数字:l(l+1)(l+2)...(r-1)r.例如: l = 2,r = 5 时,数字为:2345; l = 8,r = 12 时,数字为:8910111 ...

  5. Vijos P1986 小h的妹子树二

    Vijos P1986 小h的妹子树二 题目 背景 小h同学的妹子实在是太多辣,多的他又种下了一颗妹子树. 描述 树上有n个妹子,两两之间有且仅有一条路径. 小h每次想泡两个妹子,但是妹子是一种奇怪的 ...

  6. 小H和迷宫(C++)

    题目描述 ​ 小H陷入了一个迷宫中,迷宫里有一个可怕的怪兽,血量有N点,小H有三瓶魔法药水,分别可以使怪兽损失a%.b%.c%的血量(之后怪兽的血量会向下取整),小H想合理地运用这三瓶药水,使怪兽失去 ...

  7. 小H的硬币游戏(后悔贪心)

    题目描述 小 H 参加了一场神秘的游戏.游戏中有 n 堆硬币,第 i 堆价值 ai.每次小 H 可以选择编号相差 k 的硬币同时拿走.注意拿走后硬币不进行重标号.小 H 想知道最多能拿走多大价值的硬币 ...

  8. XMUOJ·小H的塔防游戏2

    小H的塔防游戏2 题目描述 小H在你的帮助下成功通过了塔防游戏1. 现在来到了第二关,有一个n*n的地图,地图中'X'代表障碍物,'.'代表空地. 小H需要在空地上建防御塔,规定任意两个防御塔不能位于 ...

  9. XMUOJ·小H的超大背包

    小H的超大背包 题目描述 小H有一个容量特别大的背包,用来装一些体积很大的物品. 每个物品都有一个价值,并且只有一件 请你帮助小H计算这个超大背包最大能装多少价值的物品,并且这些物品的总体积不超过背包 ...

最新文章

  1. 实用Common Lisp编程——函数
  2. CentOS修改yum源为阿里云
  3. ln -s 的一个坑
  4. 十六、PHP框架Laravel学习笔记——构造器的增删改
  5. 2018 腾讯功能游戏开发者赛事火热开启
  6. HttpClient发送get post请求和数据解析
  7. val text html
  8. 服务器win10系统开机慢,Win10系统开机慢怎么办 windows10开机慢的解决方法
  9. Rust : wasm尝试 与wasmtime库
  10. “中国互联网100强”(2013)发布
  11. PDF怎么转换成Word文字
  12. GetTickCount函数
  13. 极域电子教室豪华版v6.0.2021有哪些功能
  14. python将word文档转图片_如何将word文档转换为图片
  15. Google究竟怎么扣税,如何结算?你想知道的都在这里了
  16. 三大条件致病菌|大肠埃希氏菌、血链球菌、李斯特菌
  17. JavaScript实战手册(涵盖丰富的JQuery应用实例)
  18. 分享B2C来客推线上商城网站SEO优化方案
  19. 【轨迹规划】机械臂末端姿态轴角插补
  20. 漫画:为什么程序员没有女朋友?

热门文章

  1. leetcode第一题
  2. Day 24 - 设定开发帐号 HBuilder X - DCloud 注册
  3. this指向 改变this指向
  4. iPhone手机热点连接不稳定
  5. 内部类和匿名类的介绍
  6. Android【WebView】
  7. 评论发表之屏蔽关键字
  8. 安全配置管理 (SCM):建立安全的基础
  9. 如何快速转载CSDN中的博客2018年针对最新csdn
  10. 基于Matlalb使用惯性传感器融合和MPU9250估计方向(附源码)