CF1601F Two Sorts

给定 \(n\),将 \(1\sim n\) 按照字典序排序,\(a_i\) 表示第 \(i\) 小的数,求:

\[\left(\sum_{i=1}^{n} ((i-a_i)\bmod 998244353)\right) \bmod 10^9+7
\]

\(1\le n\le 10^{12}\)

Solution

先暴力,我们按照字典序搜索(记 \(\text{cnt}\) 和 \(\text{val}\) 表示第 \(\text{cnt}\) 小的数是 \(\text{val}\))即可线性。

考虑根号分治(不搜索末 \(6\) 位),我们同样搜索,处理到 \(\overline {\text{valxxxxxx}}\) 时(假设 \(\overline{\text{val999999}} \le n\),即没有任何上界限制),会发现可以快速计算这些值的和。

我们记 \(cnt_{x}\) 表示 \(x\) 的排名,\(cnt'_x\) 表示 \(x\) 在 \(\overline {abcdef}\) (\(0\le a,b,c,d,e,f\le 9\),即可以有前导零)的排名。

那么, \(cnt_{\overline {\text{valxxxxxx}}}=cnt_{\overline{\text{val}}}+cnt'_{\overline{\text{xxxxxx}}}\),因此可以把贡献拆成:

\[\left((cnt_{\overline{\text{val}}}-10^6\cdot val)+(cnt'_{\overline{\text{xxxxxx}}}-\overline{\text{xxxxxx}})\right) \bmod 998244353
\]

因此,我们可以预处理 \(\overline{\text{xxxxxx}}\) 相关的信息,即 \((cnt'_{\overline{\text{xxxxxx}}}-\overline{\text{xxxxxx}})\)。

由于上述式子是 \((A+B)\bmod P\) 形式,而 \(0\le A,B<P\),因此值为 \(A+B\) 或 \(A+B-P\),判断这个可以通过一个二分解决。

因此,总时间复杂度 \(\mathcal O(\sqrt{n} \log n)\)。

提一句,这个实在太难表述了,所以可以对照代码阅读。我的代码码量极小,并且是目前的最优解。

CF1601F Two Sorts的更多相关文章

  1. Uva 110 - Meta-Loopless Sorts(!循环,回溯!)

    题目来源:https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&category=3&pa ...

  2. Uva110 Meta-Loopless Sorts

    Meta-Loopless Sorts Background Sorting holds an important place in computer science. Analyzing and i ...

  3. UVA 110 Meta-Loopless Sorts(输出挺麻烦的。。。)

     Meta-Loopless Sorts  Background Sorting holds an important place in computer science. Analyzing and ...

  4. 普林斯顿大学算法课 Algorithm Part I Week 3 排序的应用 System Sorts

    排序算法有着广泛的应用 典型的应用: 排序名称 排序MP3音乐文件 显示Google的网页排名的搜索结果 按标题顺序列出RSS订阅 排序之后下列问题就变得非常简单了 找出中位数(median) 找出统 ...

  5. Out of Sorts II

    问题 E: Out of Sorts II 时间限制: 1 Sec  内存限制: 128 MB提交: 68  解决: 4[提交] [状态] [讨论版] [命题人:] 题目描述 Keeping an e ...

  6. 2019 GDUT Rating Contest III : Problem A. Out of Sorts

    题面: 传送门 A. Out of Sorts Input file: standard input Output file: standard output Time limit: 1 second M ...

  7. sorts

    各种排序算法: #include <stdio.h> #include <string.h> #include <ctype.h> #include <std ...

  8. 洛谷 P4375 [USACO18OPEN]Out of Sorts G(树状数组求冒泡排序循环次数加强版)

    传送门:Problem 4375 参考资料: [1]:https://www.cnblogs.com/Miracevin/p/9662350.html [2]:https://blog.csdn.ne ...

  9. 洛谷 P4378 [USACO18OPEN]Out of Sorts S(树状数组求冒泡排序循环次数)

    传送门:Problem P4378 https://www.cnblogs.com/violet-acmer/p/9833502.html 要回宿舍休息了,题解明天再补吧. 题解: 定义一数组 a[m ...

随机推荐

  1. pip freeze > requirements.txt` 命令输出文件中出现文件路径而非版本号

    pip freeze > requirements.txt 命令输出文件中出现文件路径而非版本号 解决办法: pip list --format=freeze > requirements ...

  2. CCF201509-2日期计算

    问题描述 给定一个年份y和一个整数d,问这一年的第d天是几月几日? 注意闰年的2月有29天.满足下面条件之一的是闰年: 1) 年份是4的整数倍,而且不是100的整数倍: 2) 年份是400的整数倍. ...

  3. JWT介绍及使用

    目录 JWT-JSON WEB TOKEN JWT组成 header payload signature JWT校验 JWT获取信息 JJWT(java jwt api)使用 导入依赖 测试代码 JW ...

  4. idea启动tomcat后控制台日志显示中文乱码问题

     想必有些人 会遇到 控制台中文乱码: 可以通过以下方法解决该中文乱码问题: 1. 点击Help => Edit custom VM Options,在最后面添加 "-Dfile.en ...

  5. macos停止MySQL服务

    1.命令行中 使用 find /usr  -name mysql 查找自己电脑中MySQL的安装位置 例如我查找到我电脑MySQL安装位置是 /usr/local/Cellar/mysql@5.6/5 ...

  6. 嵌入式Servlet容器

    配置嵌入式Servlet容器 ##Spring Boot里面内置了嵌入式的Servlet容器(tomcat) 点击pom.xml->右键->Diagrams->show Depend ...

  7. JavaSSM-总结

    Spring框架技术 SSM(Spring+SpringMVC+Mybatis)阶段的学习,也算是成功出了Java新手村. 前面我们已经学习过Mybatis了. 从这里开始,很多的概念理解起来就稍微有 ...

  8. API管理工具介绍

    ​ 时间都去哪里了 敏捷迭代和团队协作,前后端分离的工作模式几乎是每个互联网公司的常规工作模式. 前后端分离,各自开发的优点很多,其中一项是它只需要提供一个统一的API接口,即可被web,iOS,An ...

  9. JavaScript学习②

    2. 基本对象: 1. Function:函数(方法)对象 1. 创建: 1. var fun = new Function(形式参数列表,方法体); //忘掉吧 2. function 方法名称(形 ...

  10. what 的页面制作

    1. html结构 <!-- section: what we do --> <section id="what" class="bg-light py ...