Basil's Garden§

显然,最右侧花变为 \(0\) 会用时 \(h_n\) ,考虑倒着递推。

假设当前为第 \(i\) 朵花,那么其和第 \(i + 1\) 朵花只有两种情况,第一种是两者高度不会在某一轮相等,第二种是会在某一轮相等。

前者意味着第 \(i\) 朵花高度更高,也意味着第 \(i\) 朵花高度变为 \(0\) 会用时 \(h_i\)

后者意味着两朵花会在某一个时刻高度相同(不为 \(0\) ),并且第 \(i\) 朵花会晚于第 \(i\) 朵花一秒变为 \(0\)

综上, \(t_i\) 只会等于 \(h_i\) 或者 \(t_{i+1}+1\)

至于具体是哪一个,则是选择它们的最大的那个,因为选择其中较小的值的话显然会矛盾。

#include <bits/stdc++.h>

void solve() {
    int n;
    std::cin >> n;
    std::vector<int> h(n);

    for (auto &it : h) {
        std::cin >> it;
    }

    int ans = h[n - 1];

    for (int i = n - 2; i >= 0; i--) {
        ans = std::max(ans + 1, h[i]);
    }

    std::cout << ans << '\n';
}

int main() {
    std::ios::sync_with_stdio(false);
    std::cin.tie(nullptr);

    int t;
    std::cin >> t;

    while (t--) {
        solve();
    }

    return 0;
}