Codeforces Round #705 (Div. 2)

E

结论1:若(l)(r)最高位不相同,则答案为(11cdots11)

证明显然

结论2:若(l)(r)最高位相同,(r)为奇数,答案为(r)

证明:
归纳,边界条件为(l=r)(l=r-1),显然答案为(r)
考虑证明([l,r+2])的答案为(r+2)
答案由三部分组成:(1)右界为(r+2)(2)右界为(r+1)(3)右界(in [l,r])
通过归纳,第三部分答案为(r)
若第一组(lle r+1),由于经过了([r,r+1]),这部分( ext{xor}=1),所以答案最多比第三部分多(1),即(le r+1),故第一部分最大答案为(r+2)
最后考虑第二部分,假设其答案大于(r+2)
那么必定存在某位(r+2)中为(0)的,再答案中变成了(1)
其必定不是个位,因为(r+2)中个位为(1),考虑离(r+1)最近的该位为(1)的数(x)(x)必定为奇数,而(r+1)为偶数,故([x,r+1])这段的长度为偶数,
容易证明这一位为(1),到前一个这一位为(1)的数间的距离,必定为奇数(相邻均为(1)显然距离为(1),否则考虑跨过一段该位为(0)的段,由于该位不为个位,那么这一段有偶数个数),
所以一旦该位变成了(1),因为这段区间经过了偶数个数,且这段区间内的数最高位均为(1)(l,r+2)最高位为(1)),所以最高位异或和就变成了(0),所以右界为(r+1)的区间异或和均不会大于(r+2)
得证。

结论3:若(l)(r)最高位相同,(r)为偶数,若(lle r-2),则答案为(r+1),否则答案为(r)

证明:
根据结论2容易得到答案不会超过(r+1)
(l=r-1)(r),显然答案为(r);否则取([r-2,r]),容易证明取到上界(r+1)

F

可以看到行与列是独立的,单独考虑(n)行的情况。

首先,我们判断(m)个数是否相等,可以通过(le 3)次询问来达到

It's enough to check if
[1,y]=[y+1,2y]
[1,y]=[y+2,2y+1]
either x is odd, or [1,x/2]=[x/2+1,x]

考虑将(n)分解成(prodlimits_{i=1}^m p_i^{k_i}),其计算次数为(sumlimits_{i=1}^m k_i(1+[p_ige 3]+[p_ige 5]))

具体而言,找到最小的(r(r|n)),满足可以分成(n/r)个高为(r),宽为(m)的相同块
每次考虑(r)的一个质因子(p),看能否将(r)除掉这个(p),check次数为判断(p)个数是否相等

显然,(n=2^a3^b5^c)会达到最坏结果:(a+2b+3c)

可将问题转化为:

满足(a+blog_2(3)+clog_2(5) leq log_2(N))(a,b,cge 0)
最大化(a+2b+3c)
显然(c=log_2(N)/log_2(5))时取最大值,则最坏结果为(3log_2(N)/log_2(5)),约为(1.3log_2(N))

总查询次数为(le 2.6log_2(N))

原文地址:https://www.cnblogs.com/Grice/p/14493829.html