Codeforces Round #705 (Div. 2)

E

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

证明显然

结论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\)
若第一组\(l\le r+1\),由于经过了\([r,r+1]\),这部分\(\text{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\)为偶数,若\(l\le 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\)分解成\(\prod\limits_{i=1}^m p_i^{k_i}\),其计算次数为\(\sum\limits_{i=1}^m k_i(1+[p_i\ge 3]+[p_i\ge 5])\)

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

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

可将问题转化为:

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

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

posted @ 2021-03-07 10:42  Grice  阅读(253)  评论(0编辑  收藏  举报