题解
1|0A - 地毯
标准的二维差分前缀和,定义
2|0B - FBI树
根据题意模拟,首先把节点数变成应该的长度即 F
,因为有一个是F
那么就是F
。接下来进行第二遍
3|0C - 牛牛
由于每头牛仰望的都是右边第一头比他高的牛,也就是说求从左向右数第一个递增的数字,那么我们可以考虑使用单调栈,从后往前做一个递增的单调栈,栈中存放的是一个递增牛的编号,也就是在栈中的相邻的两头牛中间隔着的牛们一定不会比这两头牛高,起到一个跳板的作用,若当前牛比栈顶高,则直接pop
掉,利用单调栈这个跳板快速跳到下一头比栈顶牛高的牛牛,否则当前牛仰望的就是栈顶的牛,而这个牛一定是右边第一头比他高的牛,然后该牛进栈,依次类推即可
4|0D - 想玩绝区零
考虑贪心,首先将数组进行排序,因为这样可以找到极值方便处理,要想最小化最大值与最小值之差,那么很明显的要从两边开始删除,那么最后留下的一定是一个连续的区间,枚举这个区间即可,假设我们当前在
直接计算即可,时间复杂度
5|0E - 班德尔城酿班德尔酒
总体看有点难做,直接考虑相邻路径,即细分
对于每条路来说,判断其到相邻的城市所需要的花费,具体情况如图所示:
那么我们直接使用前缀和来维护这两个方向的区间和,对于一个区间来说我们直接判断是从左向右方向还是从右向左方向,随后直接输出其对应的前缀和即可
- 若对应方向相邻的距离符合第一个条件,那么其花费是
- 若不满足第一个条件,则花费为
这里拿从 来举例,方向从左向右符合第一个,考虑从 ,然后考虑从 即可,这样一步步拆分贪心就可以得到最优答案
代码中两个数组, 代表从左向右的前缀和, 代表从右向左的前缀和
6|0F - 蒟蒻
6|1归并排序方法
题解中大部分都是二分和双指针,这里给出一个逆序对的题解,其实由于每个工人都有自己的方向且不会变,那么很明显的我们走完路程之后,如果原来标号小的工人走到了标号大的工人的后面那么两者一定相遇,所以可以使用逆序对。
但是有以下几点需要注意:
- 题目中工人的坐标不是升序的,不要被样例迷惑,一定要先排序
- 对于坐标相同的,我们按照标号从大到小排序,方便统计。
顺便给出一组样例
下面是代码:
6|2二分或双指针方法
我们将蚂蚁进行排序,已知两个工人若同向则不可能相遇,所以我们把工人们分成两组,一组向左一组向,这样有:
-
假设对于标号
的向左行驶的工人,那么要想向右行驶的工人与其相遇,则两者之差必然小于 ,故在二分查找小于等于其坐标 的向右行驶的工人的标号 ,在这个 ~ 这个范围内的工人均会相遇到他,即 个工人 -
设双指针
,枚举向右行驶的工人标号 ,若向左行驶的工人标号 有 ,则一直加到 ,同样的对于 来说,我们要求其最多到达不超过 的位置,这样对于当前工人 所对应的答案为
7|0G - 良好的感觉
本题稍微有点怪,本来以为是
或
发现
考虑由一个最小值组成的答案是一定的,也就是从最小值这个位置向左右扩展,左边和右边直到遇到一个比它小的位置停止,那么明显的,这个区间即是我们钦定这个最小值能做到的最大贡献,统计即可,这样做一定是对的,因为不存在另一个以这个数为最小值的更大区间。
那么我们从小到大排序,每枚举一个数就打上标记,那么我们在左右扩展中遇到标记过的就停止即可,那么一共打上了
8|0H - 切蛋糕
推一下式子,设
那么发现
那么也就是我们直接维护一个前缀和的静态区间最小值,可以用线段树,
__EOF__

本文链接:https://www.cnblogs.com/o-Sakurajimamai-o/p/18310576.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角【推荐】一下。您的鼓励是博主的最大动力!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!