1 条题解

  • 0
    @ 2022-3-24 20:00:27

    给定一个长度为 nn 的序列 aa,有以下操作:

    • 选择一个区间 [l,r][l,r],将其中的元素都加上 11

    求使 aa 单调不减的最小操作次数。

    答案就是 i=2nmax(bi1bi,0)\sum_{i=2}^n max(b_{i-1}-b_i,0)

    对于 i[2,n]i \in [2, n],如果 bi<bi1b_i < b_{i-1},那么肯定要以 l=il=i 操作 bi1bib_{i-1}-b_i 次。右端点肯定是 nn 最优,否则可能使得 br>br+1b_r > b_{r+1},徒增了操作次数。

    CODE
    #include <bits/stdc++.h>
    using namespace std;
    #define int long long
     
    inline int read() {
        int x = 0, f = 0; char c = 0;
        while (!isdigit(c)) f |= c == '-', c = getchar();
        while (isdigit(c)) x = (x << 3) + (x << 1) + (c & 15), c = getchar();
        return f ? -x : x;
    }
     
    #define INF (1e9 + 7)
    int a[200010];
     
    signed main() {
        for (int T = read(); T --;) {
            int n = read(), res = 0;
            for (int i = 1; i <= n; i ++) {
                a[i] = read();
                res += max(0ll, a[i - 1] - a[i]);
            }
            printf("%lld\n", res);
        }
        return 0;
    }
    

    让我 1min AC 了,开心

    • 1

    信息

    ID
    804
    时间
    2000ms
    内存
    256MiB
    难度
    4
    标签
    递交数
    1
    已通过
    1
    上传者