题目链接:增加序列
题目分析:
0.差分经典例题。
题解参考:蓝书23页。
code:
#include <iostream>
#include <cstring>
#include <algorithm>
using namespace std;
const int N = 1e5 + 10;
int a[N];
int b[N];
long long p, q;
int main()
{
int n;
scanf("%d", &n);
for(int i = 1; i <= n; i ++)
{
scanf("%d", &a[i]);
b[i] = a[i] - a[i - 1];
}
for(int i = 2; i <= n; i ++)
{
if(b[i] > 0) q += b[i];
else p -= b[i];
}
cout << max(q, p) << endl;
cout << abs(p - q) + 1 << endl;
return 0;
}
总结:
1.把原序列A中的[L,R]区间都加上d的话只需要将其差分序列B中B[L]+d,B[R + 1]-d,其他位置不变,把原序列上的区间操作转化为差分序列上的单点操作,有效降低求解难度。