bzoj4373

给一个允许点修改的序列,询问l到r这段是否构成公差为k的等差数列。

构成公差为k等差数列的充要条件:

①最大值-最小值 = k * (r - l)

②差分后的gcd是k的倍数(需要特判k==0)

③这段里没有重复的数

前两个可以用线段树维护。最后一个需要开一个pre数组,pre[i]表示1~i-1这段中最靠右的、且与i的值相同的位置。(set维护一下动态修改前后的量)找这段里pre最大的,如果小于l,即为正确。否则就是有重。

猜你喜欢

转载自blog.csdn.net/richard_for_oi/article/details/79984172
今日推荐