蓝书——100. IncDec序列

自古美人都是妖i 提交于 2019-12-20 03:55:40

差分数组的巧妙运用:

让所有数都相同即:让差分数组bi,b2-->bn都等于0.

每次操作相当于选择i,j.bi++,bj--;

为了让b2->bn都等于0;

正数之和:p,负数之和q

最少操作次数一定是:先选择一正一负,抵消,

然后剩的全正或者全负,与b1||bn+1,进行操作。

最少次数为|p-q|

由于选择b1,bj   和bj, bn+1

会让结果+1或者不变。

所以最终序列有|p-q|+1种情况

 

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const int M=100000+7;
int main()
{
	int n;
	scanf("%d",&n);
	int lst=0,x;
	ll nf=0,nz=0;
	for(int i=1;i<=n;i++)
	{
		scanf("%d",&x);
		if(i!=1)
		{
			if(x-lst<0)nf+=lst-x;
			else nz+=x-lst;
		}
		lst=x;
	}
	ll cz=abs(nz-nf);
	cout<<cz+min(nz,nf)<<"\n"<<cz+1<<endl;
	return 0;
}

 

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!