后缀表达式-逆波兰表达式
用栈进行计算,把数一次放入栈中,没遇到符号,就操作栈顶两个数,得到新的数再入栈
一颗树的后序遍历
(1)M = 0 全部相加
(2)M > 0 M个’-‘
一个’-‘ (两个负号可以相消)
1~M个符号均可
#include <iostream>
#include <algorithm>
#include <cstdio>
#include <cmath>
using namespace std;
const int N = 2e5 + 10;
int n, m;
int a[N];
int main()
{
scanf("%d%d", &n, &m);
int k = n + m + 1;
for (int i = 0; i < k; i ++ ) scanf("%d", &a[i]);
long long res = 0;
if (!m) for (int i = 0; i < k; i ++ ) res += a[i];
else
{
sort(a, a + k); //也可以不排序,找出最大值最小值即可
res = a[k - 1] - a[0];
for (int i = 1; i < k - 1; i ++ ) res += abs(a[i]);
}
printf("%lld\n", res);
return 0;
}