题目描述
给定一个整数序列 a1,,…,an ,小爱需要通过一系列调整操作将所有数字改成 0。每步调整操作中,小爱可以选择一段连续的区间(也可以只选一个数),将所选的全部数字增加一单位,或将所选的全部数字减少一单位。
请问小爱最少需要几步操作才能将所有数字改成 0?
输入格式
第一行:单个整数表示 n;
第二行:n 个整数表示 a1,…,an。
输出格式
单个整数:表示最少调整次数
#include <iostream>
#include<bits/stdc++.h>
using namespace std;
int n;
/* run this program using the console pauser or add your own getch, system("pause") or input loop */
long long a[500005],b[500005],ans;
int main()
{
cin>>n;
for (int i=1;i<=n;i++)cin>>a[i];
a[0]=a[n+1]=0;
for(int i=1;i<=n+1;i++){
b[i]=a[i]-a[i-1];
if (b[i]>0)
ans=b[i]+ans;
}
cout<<ans;
return 0;
}
整个区间段的变化,要想到用差分的方法来操作!
引入辅助变量a0和a5