2022.5.12 AcWing每日一题

思维题

差分数组

先得到 原始温度数组 和 需求温度数组的差值,即我们需要用差分处理的数组,假设为w。

那么问题是如何利用好,相同的那一段,减少这一段的操作数目。
进行差分之后,连续先等的一段就为0了,保证了算法的最优性。
而差分后的正负值,可以理解为对区间进行加减操作(差分的定义),可以保证算法的正确性。

PS:可以造一组样例试一下,对全0数组按照差分数组进行区间操作,即可得到当前数组,所以对当前数组进行完全相反的逆操作,也可以得到全零数组。

#include <bits/stdc++.h>
using namespace std;

const int N = 1e5 + 10;
int w[N];
int n;

int main() {
	scanf("%d", &n);
	for (int i = 1; i <= n; i++)
		scanf("%d", &w[i]);
	for (int i = 1; i <= n; i++) {
		int t;
		scanf("%d", &t);
		w[i] -= t;
	}

	for (int i = n; i > 1; i--) {
		w[i] -= w[i - 1];
	}
	int l = 0, r = 0;
	for (int i = 1; i <= n; i++) {
		if (w[i] > 0)
			l += w[i];
		else
			r -= w[i];
	}

	cout << max(l, abs(r)) << endl;

	return 0;
}
posted @ 2022-05-12 09:48  superPG  阅读(22)  评论(0编辑  收藏  举报