专栏文章

一题多解复习

个人记录参与者 1已保存评论 0

文章操作

快速查看文章及其快照的属性,并进行相关操作。

当前评论
0 条
当前快照
1 份
快照标识符
@minu6umq
此快照首次捕获于
2025/12/02 08:25
3 个月前
此快照最后确认于
2025/12/02 08:25
3 个月前
查看原文
本节为思维上的基本功,算法较杂。

例题 英雄辈出

题目描述

给你一个排列,你需要输出每个元素后第一个比其大的元素下标,若不存在输出 1-1

思路形成

序列转为二维平面点。
上下左右,四个方向,每个方向还能有多解。
序列问题,先用三个特殊序列过脑子:
  1. 升序
  2. 降序
  3. 全部相同的序列

从大到小考虑每个元素。
Hint: 可以使用 set

从小到大考虑每个元素。
Hint: 每次删除最小元素

从左到右考虑每个元素
Hint: 单调栈存问题

从右到左考虑每个元素
Hint: 单调栈存答案
请着重思考你的单调栈存了什么
选出你认为的最佳解法把~

例题 UFO

题目描述

给你若干个区间,每个区间都有个权值。
问对于每个位置,所有覆盖该位置的区间权值最小是多少?

理解

想一想图像,这里区间的高度较为明显。

思路形成

从高到低考虑每个区间

从低到高考虑每个区间

从左到右考虑每个元素
Hint: 扫描线 + set 存储

有对称性

例题 Sequence 序列问题

上下左右的思维方法\boxed{\text{上下左右的思维方法}}

元素从大到小
Hint: 想象一个山峰,最大值必须留到最后。

元素从小到大
Hint: 山谷合并旁边

元素从左到右
Hint1: 思考形如 6,5,4,3,2,16,5,4,3,2,1 的单调序列
Hint2: 思考形如 3,1,23,1,2 简单乱序序列
Hint3: 单调栈

有对称性

正解

可以由上面任意一种再思考一下得到。
CPP
long long ans=0;
for(int i=1;i<n;i++)
    ans+=max(a[i],a[i+1]);
cout<<ans;

例题 挂缀 pendant

题目大意

选择最好的解法,不要局限于单一解法。
本题有三维信息,但显然珠缀的编号是无效的。
所以只有两维(区间级别)

问题转化

已知每一个区间左端点最右能在哪,以及区间长度,求能选几个不重叠的区间。

按照右端点限制排序

模拟,贪心,反悔

按照区间排序

线段树 + 基本功。
十分复杂。

评论

0 条评论,欢迎与作者交流。

正在加载评论...