博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
玲珑杯#20 C 漆黑的太阳——莫队
阅读量:6976 次
发布时间:2019-06-27

本文共 629 字,大约阅读时间需要 2 分钟。

题目:

题解:

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

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

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

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

2.如何处理询问

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

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

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

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

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

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

(没有实现代码)

转载于:https://www.cnblogs.com/Narh/p/11083346.html

你可能感兴趣的文章
l5如何通过路由走api版本回退查找设置
查看>>
使用VisualStudio2010连接CodePlex进行代码管理
查看>>
NPOI读写Excel
查看>>
rails应用ajax之二:使用rails自身支持
查看>>
设计模式(七)组合模式Composite(结构型)
查看>>
Qt之自定义搜索框
查看>>
程序员的量化交易之路(25)--Cointrader之MarketData市场数据实体(12)
查看>>
使用 CAS 在 Tomcat 中实现单点登录
查看>>
Podfile 常见语法
查看>>
【原】YUI压缩与CSS media queries下的bug
查看>>
[AWK]使用AWK进行分割字符串以及截取字符串
查看>>
SiteMesh介绍
查看>>
form实现登陆操作
查看>>
SpriteBuilder中如何平均拉伸精灵帧动画的距离
查看>>
poj1330Nearest Common Ancestors 1470 Closest Common Ancestors(LCA算法)
查看>>
dojo从asp.net中获取json数据
查看>>
Android:problem opening wizard the selected wizard could not be started
查看>>
PostgreSQL md5 auth method introduce, with random salt protect
查看>>
【spring框架】spring整合hibernate初步
查看>>
JVM调优总结
查看>>