题目解析
* 输入输出:第一行输入两个正整数 nnn(序列长度)和 kkk(替换阈值)。第二行输入 nnn 个整数表示序列 AAA。输出 nnn 个整数,表示按照规则替换后的序列。
* 数据范围:1≤n≤1051 \le n \le 10^51≤n≤105,∣ai∣,∣k∣≤105|a_i|, |k| \le 10^5∣ai ∣,∣k∣≤105。数据规模允许线性扫描算法。
* 复杂度要求:时间复杂度 O(n)O(n)O(n),需要两次线性扫描(一次求最值,一次替换);空间复杂度 O(n)O(n)O(n) 存储原序列。
* 算法知识点:线性扫描、最值查询、简单模拟
思路解析
1. 读取数据:读入序列长度 nnn、阈值 kkk 以及长度为 nnn 的整数序列。
2. 预处理最值:使用 max_element 和 min_element 分别找出序列中的最大值 max_val\textit{max\_val}max_val 和最小值 min_val\textit{min\_val}min_val,作为后续替换的目标值。
3. 遍历替换:顺序扫描序列中的每个元素:
* 若当前元素 >k> k>k,替换为 max_val\textit{max\_val}max_val;
* 若当前元素 <k< k<k,替换为 min_val\textit{min\_val}min_val;
* 若当前元素 =k= k=k,保持原值不变(隐含在逻辑中,不进入上述两个分支)。
4. 输出结果:处理每个元素后立即输出(或存储后统一输出),保持原序列顺序。
完整代码