给一个允许点修改的序列,询问l到r这段是否构成公差为k的等差数列。
构成公差为k等差数列的充要条件:
①最大值-最小值 = k * (r - l)
②差分后的gcd是k的倍数(需要特判k==0)
③这段里没有重复的数
前两个可以用线段树维护。最后一个需要开一个pre数组,pre[i]表示1~i-1这段中最靠右的、且与i的值相同的位置。(set维护一下动态修改前后的量)找这段里pre最大的,如果小于l,即为正确。否则就是有重。
给一个允许点修改的序列,询问l到r这段是否构成公差为k的等差数列。
构成公差为k等差数列的充要条件:
①最大值-最小值 = k * (r - l)
②差分后的gcd是k的倍数(需要特判k==0)
③这段里没有重复的数
前两个可以用线段树维护。最后一个需要开一个pre数组,pre[i]表示1~i-1这段中最靠右的、且与i的值相同的位置。(set维护一下动态修改前后的量)找这段里pre最大的,如果小于l,即为正确。否则就是有重。