题目传送门:https://codeforces.com/problemset/problem/474/F
题目大意:
给定一串长度为\(n\)的序列\(A\),记子串\([l_i,r_i]\)中,\(v_k+1=\sum\limits_{j=l_i}^{r_i}[A_j\%A_k==0],(l_i\leqslant k\leqslant r_i)\),(\(v_k+1\)是为了包含了自己\(\%\)自己的情况)
现有\(m\)组询问,每次询问子串\([l_i,r_i]\)中,\(v_k\neq r_i-l_i\)的数的个数
考虑什么数才会有\(v_k=r_i-l_i\),显然是\([l_i,r_i]\)所有数的最大公约数
故我们求出\([l_i,r_i]\)的最大公约数后,再求其在\([l_i,r_i]\)中的出现次数即可
一个用线段树维护,一个用主席树维护,码就完事了
/*program from Wolfycz*/
#include