#3903. 魔幻障碍赛道
魔幻障碍赛道
🐰😺🏃♂️ 兔猫信奥学院的魔幻障碍赛道探险 🏃♀️😺🐰
在信奥学院的秘林深处,隐藏着一条由高低不一的魔法障碍石柱组成的赛道。每根石柱上都镌刻着它的“高度”——代表着你必须跨过去的难度。小兔和小猫打算在这条赛道上设计一系列“魔幻障碍赛跑”路线:
- 每条路线都要按石柱在赛道上的先后顺序通过;
- 起始位置可以选择赛道开头任意一根石柱,但一定要包含当前考虑的第 i 根石柱;
- 越往后跑,障碍的高度不能降低(即每一步跨到的石柱高度都要 ≥ 前一步);
对于赛道上第 i 根石柱(下标从 0 开始),请你帮忙计算:在必须经过第 i 根石柱的前提下,最长的合法障碍赛跑路线能有多长?
输入格式
第一行:整数 n,表示石柱数量(赛道长度)。
第二行:n 个整数 obstacles[i],用空格分隔,表示每根石柱的高度。
输出格式
输出一行 n 个整数 ans[i](用空格分隔),其中 ans[i] 是经过第 i 根石柱时能跑出的最长合法路线长度。
样例 1
4
1 2 3 2
1 2 3 3
- 解释:
- i=0 时,路线只能是 [1],长度 1。
- i=1 时,可跑 [1,2],长度 2。
- i=2 时,可跑 [1,2,3],长度 3。
- i=3 时(石柱高度 2),最佳跑法是 [1,2,2] 或 [1,2,2],长度 3。
样例 2
3
2 2 1
1 2 1
- 解释:
- i=0: [2] → 1
- i=1: [2,2] → 2
- i=2: 只能单独 [1] → 1
🎓 加菲老师寄语:
这种利用 tails
数组和二分查找的方法,能够在线性对数时间内针对每个位置高效地计算“最长非降子序列”长度,非常适合大规模赛道设计。愿你在魔幻障碍赛道中跑出最强成绩!