
只要有这种对一定区域进行统一加减的题目,首先考虑到差分。
这一道题的思路就比较简单了,首先如果你想确定l和r的区间,但是你发现,这个区间是不确定的,但是对一个差分序列在[l,r]的区间进行统一加减就代表了在差分数列b[l+1]++,b[r]--这个操作就可以在原先的某个区域进行加减同一个数的操作下面是我的代码
具体看代码再理解。
#include<iostream>
#include<cstdio>
#include<algorithm>
using namespace std;
const int N=100010;
int a[N];
int n;
int main()
{
cin>>n;
for(int i = 1; i <= n; i ++ )
cin>>a[i];
for(int i = n;i; i -- )
a[i]=a[i]-a[i-1];
long long pos=0,neg=0;
for(int i = 2;i <= n; i++)
{
if(a[i]>0) pos+=a[i];
else neg-=a[i];
}
cout<< min(pos,neg) + abs(pos-neg) <<endl;
cout<< abs(pos-neg) + 1 <<endl;
return 0;
}
本文介绍了一种利用差分序列优化算法解决特定区域统一加减问题的方法。通过将原问题转化为差分序列上的操作,可以高效地在指定区间内进行数值的统一增减。文章详细解释了算法的实现思路,并提供了C++代码示例。

453

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



