省选模拟五十五 题解

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}$

扫描线扫一遍即可

posted @ 2020-03-27 21:37  ATHOSD  阅读(336)  评论(0编辑  收藏  举报