Farmer John 的 N头奶牛对他们牛棚的室温非常挑剔。
有些奶牛喜欢温度低一些,而有些奶牛则喜欢温度高一些。
Farmer John 的牛棚包含一排 N个牛栏,编号为 1…N,每个牛栏里有一头牛。
第 i� 头奶牛希望她的牛栏中的温度是 pi,而现在她的牛栏中的温度是 ti。
为了确保每头奶牛都感到舒适,Farmer John 安装了一个新的空调系统。
该系统进行控制的方式非常有趣,他可以向系统发送命令,告诉它将一组连续的牛栏内的温度升高或降低 11 个单位——例如「将牛栏 5…85…8 的温度升高 11 个单位」。
一组连续的牛栏最短可以仅包含一个牛栏。
请帮助 Farmer John 求出他需要向新的空调系统发送的命令的最小数量,使得每头奶牛的牛栏都处于其中的奶牛的理想温度。
输入格式
输入的第一行包含 N。
下一行包含 N 个非负整数 p1…pN,用空格分隔。
最后一行包含 N 个非负整数 t1…tN。
输出格式
输出一个整数,为 Farmer John 需要使用的最小指令数量。
数据范围
1≤N≤10^5,
0≤pi,ti≤100000
输入样例:
5
1 5 3 3 4
1 2 2 2 1
输出样例:
5
样例解释
一组最优的 Farmer John 可以使用的指令如下:
初始温度 :1 2 2 2 1
升高牛棚 2..5:1 3 3 3 2
升高牛棚 2..5:1 4 4 4 3
升高牛棚 2..5:1 5 5 5 4
降低牛棚 3..4:1 5 4 4 4
降低牛棚 3..4:1 5 3 3 4
参考代码:
/*
给定数组a,b,进行m次操作使得两数组相等。
p = a-b,d为p的差分数组。
可以理解为将数组p变为全0的操作次数,每次操作为1。
可以转换为差分,对于p的差分数组d每次对于两个数+1,和-1。最后使得数组全为0;
等价于统计d数组中>0的数pos与<0的数neg求出最大值。
d为差分数组每次要同时改变两个数使其一个+1,一个-1。
若正数全部归零,剩余的让负数和n后的数字做交换。
*/
#include <iostream>
#include <cstring>
#include <algorithm>using namespace std;
const int N = 1e5+10;
int a[N],b[N];
int n;int main()
{cin>>n;for(int i=1;i<=n;i++) cin>>a[i];for(int i=1;i<=n;i++){cin>>b[i];a[i] -= b[i];}for(int i=n;i>0;i--) a[i] -= a[i-1];int pos = 0,neg = 0;for(int i=1;i<=n;i++){if(a[i]>0) pos += a[i];else neg -= a[i];}printf("%d\n",max(pos,neg));return 0;
}