只要有这种对一定区域进行统一加减的题目,首先考虑到差分。
这一道题的思路就比较简单了,首先如果你想确定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;
}