题意简述
给定给一个序列,每次支持:
- 单点修改
- 询问一段区间是否能排列成一个公差为$d$的等差数列
(强制在线)
区间长度$3e5$,其它的值域都在$[0,1e9]$之间。
思路框架
维护区间和?显然能构造出一种情况卡掉。
那怎么办?维护区间平方和!然后看看是否和等差数列的平方和相等即珂。和很容易相等,但是平方和在$1e9$的范围内,就不太容易相等了。然后为了防止溢出,我们把答案对一个大质数取膜。
然后就是高能线段树+高能数论了。
求等差数列平方和
等差数列,首项为$a$,公差为$d$,项数为$n$。
要求$\sum\limits_{i=0}^{n-1} (a+id)^2$。
拆开括号,然后把$d$提出来,套各种公式,得到结果为:
$na^2+2ad\times s(n-1)+d^2s2(n-1)$
其中$s(n)=1+2+3…+n=n(n+1)/2$,$s_2(n)=1^2+2^2+3^2…+n^2=\dfrac{n(n+1)(2n+1)}{6}$。
代码
1 |
|