题目描述
给定一个长度为n的数列a1,a2,…,an,每次可以选择一个区间[l,r],使得这个区间内的数都加1或者都减1。
请问至少需要多少次操作才能使数列中的所有数都相等?在保证最少次数的前提下,最后的情况有多少种?
输入格式
第一行一个正整数n。
接下来n行,每行1个整数,第i+1行的整数代表ai。
输出格式
两行,每行一个整数。
第一个整数代表最少操作次数。
第二个整数代表最终会得到多少种结果。
输入输出样例
输入
4
1
1
2
2
输出
1
2
数据规模说明
1<=n<=105,0<=ai<=231
代码
#include <iostream>
#include <cmath>
using namespace std;
int main() {
int n;
cin>>n;
int a[n];
long long up=0, down=0;
for(int i=0; i<n; i++) {
cin>>a[i];
if(i>0) {
int temp=a[i]-a[i-1];
if(temp>0) {
up+=temp;
} else {
down+=(-1)*(temp);
}
}
}
cout<<max(up,down)<<endl; //上升偏移和下降偏移的最大值
cout<<abs(a[0]-a[n-1])+1; //a[0]~a[n-1]之间有几个数
return 0;
}