洛谷 p3078 (差分,贪心)

题目大意:

每次可以对区间[l,r]减1,问我们最少经过多少次操作可以把数列an全变为0.

解题思路:

一开始想用二分加线段树,发现线段树不会写。丢人  

其实我们只用考虑相邻元素之间的差就可以了,因为假如本个元素比上一个小,那么其实这个元素要减的话,上一个元素已经帮你减掉了。假如本个元素比较大,对答案的贡献就是a[i]-a[i-1]

#include <bits/stdc++.h>
#define int long long
using namespace std;
int32_t main(){
    int n;cin>>n;
    int x=0;
    int ans=0;
    for(int i=0;i<n;i++){
        int t;cin>>t;
        if(t>x)ans+=(t-x);
        x=t;
    }
    cout<<ans<<endl;
	return 0;
}
发布了171 篇原创文章 · 获赞 4 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/FrostMonarch/article/details/103688905
今日推荐