题目链接
BZOJ1558
题解
等差数列,当然是差分一下
差分值相同的连续位置形成等差数列,我们所选的两个等差数列之间可以有一个位置舍弃
例如:
\(1 \; 2 \; 3 \; 6 \; 8 \; 10\)
差分后是
\(1\; 1\; 3 \; 2\; 2\)
左边两个\(1\)形成等差,右边两个\(2\)形成等差,中间的\(3\)位于两个等差数列的边界,可以舍弃
所以现在问题就转化为了:
在一个区间中选定若干个相同数字的区间,区间之间可以有一个空隙,求最少的区间数
可以用线段树维护
每个节点储存一下左右端点的值,以及\(c[2][2]\)表示左右端点选与不选时的答案
#include
#include
#include
#include
#include
#include