题目描述
思路分析
差分
先
求
出
差
分
数
组
。
则
a
[
l
−
r
]
+
1
<
=
>
b
[
l
]
+
=
1
,
b
[
r
+
1
]
−
=
1
。
因
此
把
操
作
分
为
三
大
类
。
先求出差分数组。则a[l-r]+1<=>b[l]+=1,b[r+1]-=1。因此把操作分为三大类。
先求出差分数组。则a[l−r]+1<=>b[l]+=1,b[r+1]−=1。因此把操作分为三大类。
第
一
种
:
2
<
=
l
<
=
r
<
=
n
−
1
的
修
改
,
第
二
种
:
1
−
k
(
k
<
=
n
−
1
)
的
修
改
,
第
三
种
:
k
(
k
>
=
2
)
−
n
的
修
改
,
第
四
种
:
1
−
n
的
修
改
。
第
四
章
无
效
,
舍
弃
。
根
据
贪
心
,
尽
可
能
多
选
第
一
种
操
作
(
因
为
可
以
抵
消
两
个
数
,
而
我
们
的
目
的
是
让
差
分
序
列
第
2
−
n
项
全
0
)
,
之
后
2
,
3
种
操
作
可
以
随
意
组
合
第一种:2<=l<=r<=n-1的修改,第二种:1-k(k<=n-1)的修改,第三种:k(k>=2)-n的修改,第四种:1-n的修改。第四章无效,舍弃。根据贪心,尽可能多选第一种操作(因为可以抵消两个数,而我们的目的是让差分序列第2-n项全0),之后2,3种操作可以随意组合
第一种:2<=l<=r<=n−1的修改,第二种:1−k(k<=n−1)的修改,第三种:k(k>=2)−n的修改,第四种:1−n的修改。第四章无效,舍弃。根据贪心,尽可能多选第一种操作(因为可以抵消两个数,而我们的目的是让差分序列第2−n项全0),之后2,3种操作可以随意组合
代码实现
#include<bits/stdc++.h>
using namespace std;
const int N=1e5+10;
int a[N];
int main(){
int n;
cin>>n;
for(int i=1;i<=n;i++) cin>>a[i];
for(int i=n;i>=2;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];
}
long long res1=max(pos,-neg);
long long res2=abs(pos+neg)+1;
cout<<res1<<endl<<res2;
return 0;
}