• 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))

  • 相关阅读:
    计时器chronometer补充
    SpannableString富文本
    java数据结构整理(二)
    Java数据结构整理(一)
    graphical Layout调大一点
    eclipse快捷键
    弹出式菜单(下拉菜单)实现——PopupMenu
    二级横向菜单实现——ListView
    java求两个集合的差集
    Java中String的split()方法的一些需要注意的地方
  • 原文地址:https://www.cnblogs.com/Grice/p/14493829.html
Copyright © 2020-2023  润新知