蓝桥集训之空调
-
核心思想:差分
- 目标将t[i]数组变为s[i]数组
- 求出两数组差值 构成新数组w[i]
- 求出w[i]的差分数组 差分的操作:1.左-1 右+1 2.单纯-1 3.单纯+1
- 因此求出差分数组后 次数即为将所有数变为0
- res = max(正数之和,负数之和**(绝对值)**)
-
#include<iostream>#include<cstring>using namespace std;const int N = 100010;int a[N],b[N],d[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>>c[i];a[i] -= c[i];d[i] += a[i]; //求差分数组d[i+1] -= a[i];}int z=0,f=0;for(int i=1;i<=n;i++){if(d[i]>0) z+=d[i]; //正数和else f -= d[i]; //负数绝对值和}cout<<max(z,f)<<endl;}