Dishwashing题解

Description
两头奶牛决定 Bessie 负责涂肥皂,Elsie 负责冲洗。

刚开始的时候,N 个脏盘子(保证是从 1 到 N 的一个排列)堆在 Bessie 那里,而 Elsie 这边的堆是空的。而在她们俩之间,则有一张专门放涂过肥皂的盘子的桌子。

每个冲洗步骤需要执行以下两个操作之一:

   Bessie 从脏盘子堆顶取出一个盘子,涂上肥皂,然后放在桌子上。将这个盘子放在桌子上时,Bessie 只能放在现有的非空盘堆的顶端,或是在最右边新增一个盘堆。
   Elsie 从桌子最左边的盘堆的顶端拿起盘子,将它冲洗后放在干净的盘堆顶端。

她们希望干净的盘堆能按编号排序,编号最小的在底端,编号最大的在顶端。然而她们发现有的时候这并不可能做到。现在给定脏盘子的堆叠顺序,请你求出一个最大前缀,使得该前缀的所有盘子洗干净后,能按上面的要求堆叠。
Input
第一行一个整数 N(1≤N≤10^5)。

接下来 N 行,每行一个整数,代表 Bessie 的脏盘子堆的堆叠顺序。输入的第一个盘子在堆的顶部。
Output
输出该序列的最大前缀长度,使得该前缀的所有盘子洗干净后,能按小号在下,大号在上的规则堆叠。
Sample Input
5
4
5
2
3
1
Sample Output
4
Solution
对于每一个涂好肥皂的盘子,有两种操作:
1、如果它是当前最大的盘子,新开一堆盘子。
2、否则找到一堆盘子,这堆盘子至少有一个盘子比它大,且这堆盘子越左越好。然后把这堆盘子所有比它小的丢掉。
如果当前这个盘子比我已经丢掉的最大的盘子要小,那么把剩下的盘子都丢掉并输出答案。
Code

#include<iostream>
#include<vector>
#include<cstdio>
#include<cstring>
  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值