省选模拟五十五 题解
T1
这种区间$gcd$问题首先想到做多有$nlog$个权值
把它们按照权值排个序
每一个都形如${L,R,x,w}$
对于权值相同的便可以进行dp了
设$f[i]$代表$[1,i]$的方案数
对于每个${L,R,x,w}$都会使$f[x+1...n]+=\sum_{i=L}^{R}f[i-1]$
用线段树维护即可
类似的处理出反着的方案数设为$g$
对于一个士兵$S$而言
它不被选入的方案就是$f[S-1]*g[S+1]$
维护一个变量$T$代表总的方案数(即$f[n]$之和)
用T减去即可得到最终答案
每次S的贡献不同的只有O($k$)个($k$是这个权值的个数)
所以最终复杂度$O(nlognlogn)$
T2
结论一:答案等于每个白点$(x,y)$的$lowbit(max(x,y))$的异或和
$[0,2^30)$建树方便$O(1)$算出答案
考虑一个树点的答案:
这个树点的区间一定是$[a*2^b,(a+1)*2^b)$
结论二:贡献就是$lowbit(a*2^b)\ xor\ 2^{b-1}$
扫描线扫一遍即可