[R2B] 向前看

  • 难度 入门
  • 时限 1s
  • 空限 512m
  • 贪心模拟

数据规模:1n2×1051 \le n \le 2 \times 10^51hi1091 \le h_i \le 10^9

思路

ii 个人满足条件当且仅当 hih_i 严格大于前 i1i-1 个人的最大值。维护前缀最大值 mxmx,扫描时若 hi>mxh_i > mx 则答案加一并更新 mxmx

复杂度:时间 O(n)O(n),空间 O(1)O(1)

仓颉实现

import std.env.*
import std.convert.*

main(): Int64 {
    let reader = getStdIn()
    let n = Int64.parse(reader.readln().getOrThrow())
    let a = reader.readln().getOrThrow().split(" ", removeEmpty: true).map({ p => Int64.parse(p) })
    var ans: Int64 = 0
    var mx: Int64 = 0
    for (i in 0..n) {
        if (a[i] > mx) {
            ans += 1
            mx = a[i]
        }
    }
    println(ans)
    return 0
}

要点:

  • 条件是「严格高于」前面所有人,相等的身高不算;hi1h_i \ge 1,前缀最大值初值为 00 时第一个人必然计入答案。
  • 输入行尾可能有多余空格,用 split(" ", removeEmpty: true) 过滤空串。