• 玲珑杯#20 C 漆黑的太阳——莫队


    题目:https://www.ifrog.cc/acm/problem/1155

    题解:https://www.ifrog.cc/acm/solution/28

    1.如何不重复计算一个值

      自己想的是对于一种方案,在一个值的最靠前位置上计数。那么对于每个位置,它前面不能有和它相同的值被选、后面随便。

      但这样很难做。因为与“询问长度”和“所处位置”都有关系。

      题解是从每种值的贡献考虑。设值 x 出现了 y 次,贡献就是 ( x*2^{len-y}*(2^{y}-1) = x*(2^{len}-2^{len-y}) )

    2.如何处理询问

      自己考虑的是:(1)询问离线,按右端点排序,然后枚举右端点,数据结构维护各种位置做左端点的答案((sum x)用线段树维护,与 y 相关的部分怎么办?);

             (2)线段树,查询就用线段树各种区间拼起来(难以合并两个区间?);

             (3)分块(难以合并两个块的答案?)。

      题解采用了莫队!那么 (sum x ) 就很好维护。考虑与 y 有关的部分。

      因为模数不同且不一定是质数,所以考虑精确地记录下 y 是什么。注意到长为 n 的序列里,元素 “出现次数” 只有 (O(sqrt{n})) 种,因为 ( 1+2+...+sqrt{n} )大概就是 n 了。

      所以 f[ i ] 记录出现了 i 次的各种值的和,ct[ i ] 表示 i 这个值出现了几次。然后莫队即可。

    (没有实现代码)

  • 相关阅读:
    jquery从零开始(一)
    Android第三次作业
    Android第一次作业
    团队作业-项目答辩
    软工第二次作业
    软工团队第二次作业
    bug killer 团队
    软件工程第一次作业
    Android第四次作业
    Android第三次作业
  • 原文地址:https://www.cnblogs.com/Narh/p/11083346.html
Copyright © 2020-2023  润新知