AcWing 100. 增减序列
原题链接
中等
作者:
乡村守望者
,
2020-02-17 13:41:14
,
所有人可见
,
阅读 679
//这里可以先处理处差分数组
//然后让除首位 其他都为0 满足题意
//满足上一行时 首位可能的情况 满足题意
//差分区间修改时,+ - 或 - +
//贪心 先把后面的正数和负数相互+- -+ 消掉
//然后后面的数字可以选择和首位 或者 最后末位相消
//可能会爆int
#include<iostream>
using namespace std;
const int N = 100010;
typedef long long LL;
int b[N];
int a[N];
int main()
{
int n;
cin>>n;
for(int i=1;i<=n;++i)cin>>a[i];
for(int i=1;i<=n;++i)b[i]=a[i]-a[i-1];
LL x = 0, y=0;//+ -
for(int i=2;i<=n;++i){
if(b[i]>0)
x+=b[i];
else
y-=b[i];
}
LL ans1 = max(y,x);
LL ans2 = abs(y-x)+1;
cout<<ans1<<endl<<ans2<<endl;
return 0;
}