题解:CF1987C Basil's Garden

注意到一盆花有两种情况。

  • ai>ai+1a_i>a_{i+1} 则需花费 ii 个单位时间。
  • aiai+1a_i\le a_{i+1}ai+1a_{i+1}00aia_i11,需要花费 ai+1+1a_{i+1}+1 个单位时间。

设答案为 ansans,结合两点可得出 ansans 每次应更新为 max(ans+1,a[i])\max(ans+1,a[i])

注意需要倒推,因为 ansans 实际是 ana_n 的时间,时间复杂度 O(n)O(n)

Code:

#include<bits/stdc++.h>
using namespace std;
int n, a[200005];
int main(){
    int t;
    cin >> t;
    while(t --){
        cin >> n;
        for(int i = 1; i <= n; i ++) cin >> a[i];
        int ans = a[n];
        for(int i = n - 1; i >= 1; i --) ans = max(ans + 1, a[i]);
        cout << ans << "\n";
    }
    return 0;
}

posted on 2024-08-04 12:04  zhangzirui66  阅读(7)  评论(0)    收藏  举报  来源

导航