题目大意:
每次可以对区间[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;
}

本文介绍了一种优化算法,用于解决将数列通过区间减一操作全部变为0的问题。关键在于理解相邻元素差值的重要性,避免了复杂的二分加线段树方法,采用更简洁高效的遍历比较策略。
580

被折叠的 条评论
为什么被折叠?



