又因为这段区间有(l-r+1)个且互不相同的数,所以只有可能是把拿(l-r+1)种情况都占满了的,也就是等差数列。 在伪证完了之后,我们来考虑如何维护这些性质。鉴于是区间查询,所以考虑线段树维护。最大值和最小值不用说,gcd只需要记录一个数和它下一个数的差,再与其它差求gcd,查询只需要查询(l,r-1)即可。
【题解】P5278 算术天才⑨与等差数列 有趣的乱搞做法和一个没想到的 trick,一起记一下。 思路 线段树 + 哈希 / trick. 首先是乱搞做法。 意识到可以像 P3792 由乃与大母神原型和偶像崇拜那个被疯狂 hack 的题一样考虑哈希,可以考虑直接用和。 一个区间能重排成公差为kk的等差数列,那么其中的每个数都可以被...
维护两个 hash 值,线段树维护两个区间平方和,最后比较是否相等就可以判断等差数列了 /* work by:Ariel_ inv[10^9 + 7] = 166666668 inv[10^9 + 9] = 833333341 */ #include <iostream> #include <cstring> #include <cstdio> #include <queue> #include <algorithm> #define rg register #define lson...
}template<typenameT>inlinevoidwrite(T x){if(x<0)putchar('-'),x=-x;if(x>9)write(x/10);putchar(x%10^48);return; }#defineint long longconstintN=1e6+5,p=998244353;intn,m,las;intsum[N<<2],minn[N<<2],mi,base,sqr1;#definesqr(x) (x*x%p)#defineinc(x,y) (x+y>=p?x...
luogu P5278 算术天才⑨与等差数列 题面传送门 hash那个很屑我们不去管。考虑确定性算法。 首先我们要保证区间最大减去最小为(r−l)k(r−l)k 然后如果k=0k=0直接看gcdgcd即可。 否则看gcdgcd是不是kk的倍数且区间没有重复的数显然是对的。