zrt当年是怎么想到的…….
思路: 考虑把序列分块 对于每块 存xor[i] 表示从本块开头到i的前缀异或和 把它扔进set里 存gcd[i]表示从本块开头到i的前缀gcd. 如果这一块的GCD和整个的gcd的gcd是一样的 从set里找ans 否则暴力.. GCD最多log种 所以是复杂度是O(nsqrt(n)logn)的//By SiriusRen#include#include #include #include #include using namespace std;const int N=100050;int n,q,a[N],Block,block[N],XOR[N],GCD[N];char op[150];typedef long long ll;set s[320];int gcd(int x,int y){ return y?gcd(y,x%y):x;}signed main(){ scanf("%d",&n),Block=sqrt(n); for(int i=0;i