C++动态规划及单调队列的优化—————拥挤的奶牛(挤奶牛Crowded Cows)和弹簧高跷(POGO的牛Pogo-Cow)

本文介绍了如何使用C++和动态规划结合单调队列来解决两道题目:拥挤的奶牛(Crowded Cows)和弹簧高跷(POGO的牛Pogo-Cow)。对于每道题,文章提供了详细的思路分析,代码实现,并进行了总结。通过单调队列优化,有效降低了时间复杂度。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

题目描述:

FJ的n头奶牛(1<=n<=50000)在被放养在一维的牧场。第i头奶牛站在位置x(i),并且x(i)处有一个高度值h(i)(1<=x(i),h(i)<=1000000000)。

一头奶牛感觉到拥挤当且仅当它的左右两端都有一头奶牛所在的高度至少是它的2倍,且和它的距离最多为D。尽管感到拥挤的奶牛会产生更少的牛奶,FJ还是想知道一共有多上感到拥挤的奶牛。请你帮助他。

输入:

第一行:两个整数n和D。

第二行到第n+1行:每一行有两个数表示x(i)和h(i)。

输出:

一个数k表示感到拥挤的奶牛的数量。

输入样例:

6 4
10 3
6 2
5 3
9 7
3 6
11 2

输出样例:

2

思路分析:

当我们看到这一道题时,我们应该知道这是求区间内的最大值,我们就应该想到用单调队列(如果不懂单调队列)解决了,我们可以维护一个不下降队列,从左到右依次遍历,再用一个数组存储满足条件的情况,最后倒着遍历用ans记录个数就可以得出答案了。

代码实现:

#include<
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值