[NOIP2013] 积木大赛

Description

给定一个长度为 (n) 的数列,每次可以选择一个区间使得其 (-1),求将所有数变为 (0) 的最少操作次数。

Solution

差分序列中所有正值的总和。

Another sol: 强行找到序列中最小的位置,然后删去之。显然每个位置只会被考虑一次。线段树维护即可。

#include <bits/stdc++.h>
using namespace std;
#define int long long
signed main()
{
    int x,y=0,n,ans=0;
    cin>>n;
    for(int i=1;i<=n;i++)
    {
        cin>>x;
        if(x>y) ans+=x-y;
        y=x;
    }
    cout<<ans<<endl;
}
原文地址:https://www.cnblogs.com/mollnn/p/13664828.html