AcWing 100. 增减序列

给定一个长度为n的数列每次可以选择一个区间 [l,r],使下标在这个区间内的数都加一或者都减一。

求至少需要多少次操作才能使数列中的所有数都一样,并求出在保证最少次数的前提下,最终得到的数列可能有多少种。

#include<bits/stdc++.h>
#define ll long long
using namespace std;
const int N=1e5+5;
ll a[N],c,x,y;
int main()
{
    int n;cin>>n>>a[1];
    for(int i=2;i<=n;i++)
    {
        scanf("%lld",&a[i]);
        c=a[i]-a[i-1];
        if(c>0)x+=c;
        else y-=c;        
    }
    cout<<max(x,y)<<endl<<abs(x-y)+1<<endl;
    return 0;
 } 

 

posted @ 2021-01-22 17:17  君与  阅读(69)  评论(0)    收藏  举报