分析:
这道题就是典型的差分问题,遇到那些区域增加的问题一般就是差分问题
差分的学习见专栏第一篇内容基础算法:差分-CSDN博客以及大佬写的这一篇ACWING/4262. 空调-CSDN博客
这道题的范围都是一个数字,因为用了差分,所以相当于是一起加的。
假如:和牛所喜欢的温度相差的温度分别为0 3 1 1 3
那么对应的差分f[i]为 0 3 -2 0 2,是0的那个说明这个对应的牛栏要上升的温度和前一个牛栏是一样的,不用管。
代码:
//Acwing4262 空调
#include<bits/stdc++.h>
using namespace std;
const int N=100010; //
int main()
{
int n;
scanf("%d",&n);
int a[N],b,f[N];
a[0]=0;
for(int i=1;i<=n;i++)
{
scanf("%d",&a[i]);
}
/*求每个牛栏需要改变的温度*/
for(int i=1;i<=n;i++)
{
scanf("%d",&b);
a[i]=a[i]-b;
}
/*求差分:如果还是用数组a[i]来装的话,则差分要从后往前求,不然可能出错*/
for(int i=n;i>=1;i--)
{
f[i]=a[i]-a[i-1];
}
int pos=0,neg=0;
for(int i=1;i<=n;i++)
{
if(f[i]>0) pos+=f[i];
else neg=neg-f[i]; //注意:用减法转化为绝对值的及结果
}
printf("%d",max(pos,neg));
return 0;
}