zoukankan      html  css  js  c++  java
  • CF1446

    CF1446

    题目都很有趣。

    A

    假设存在一个合法的,那么直接选。

    否则所有数都小于 (frac{W}{2}),那么按任意顺序贪心选都是对的。

    B

    类比 LCS,设 (f_{i,j}) 表示 ([?,i],[?,j]) 的最大答案。转移是 naive 的。

    C

    观察:二进制最高位相同的会连在内部,所以最高位相同的 (>2) 的集合最多保留一个。

    枚举保留谁,让内部生成树,不难发现最高位小于其的可以选一个,大于的每个可以选一个,然后递归,复杂度 (mathcal O(nlog wsim nlog^2 w))

    D

    观察:

    • 当存在两个出现次数最多的元素时答案为 ([1,n])
    • 否则最多的元素唯一,设为 (t),假设区间 ([l,r])(t) 不是出现次数的元素或之一,那么 ([l,r]) 一定不是答案。

    枚举另一个出现次数最多的元素,设为 (b),将 (b) 出现的位置全设为 (-1),最多的元素全设为 (1),其余元素为 (0),那么区间合法的必要条件是权值和为 (0),这样可以更新一次答案。

    观察:假设区间权值和为 (0) 但存在一个颜色出现次数更多,那么一定存在更大的答案。

    于是得到了一个 (mathcal O(ccdot n)) 的做法。

    考虑优化,对于出现次数大于 (sqrt{n}) 的元素考虑暴力做此算法。

    对于出现次数小于 (sqrt{n}) 的元素,枚举区间内负数的权值和为 (w),那么 (w<sqrt{n}),对于此 (w) 暴力预处理 (t) 中所有合法的段 ([l_i,r_i])

    对于出现次数满足 (wle c_i<sqrt{n}) 的元素暴力枚举每个段 ([L,R]),找到合法的最优段即可(要分类讨论)

    这里注意到假设颜色 (i)(c) 个颜色,那么对复杂度的贡献为 (c^2),取 (c=sqrt{n}) 时得最大复杂度为 (mathcal O(frac{n}{sqrt{n}} imes n))(mathcal O(n^{1.5}))

    E

    好奇怪.svg

    F

    咕咕咕

  • 相关阅读:
    Redis 是单进程单线程的?
    LeetCode-114. Flatten Binary Tree to Linked List
    Java HashMap源码分析
    转:zookeeper中Watcher和Notifications
    分布式服务框架
    LeetCode-330.Patching Array
    转:String StringBuffer StringBuilder区别
    最小堆代码实现
    数组的各类排序
    两步建立 ssh 反向隧道
  • 原文地址:https://www.cnblogs.com/Soulist/p/13995746.html
Copyright © 2011-2022 走看看