CF 1946 F

news/2024/9/22 22:54:31

一道好题。

  • 一定要好好读题,不要看漏。

一个非常非常重要的条件是,\(a\) 是一个排列。这就说明可能会有调和级数之类的做法了。

  • 考虑怎么处理询问 \([l,r]\) 之类的东西。

有一个普遍的思路,就是 \(ans=sol(r)-sol(l-1)\),但是我们发现并不适用。因此朴素的 \(f_i\) 表示 \(1\sim i\) 的答案就可以了,我们必须再加一维状态,设 \(f(l,r)\) 为起点在 \(l\),终点在 \(r\) 的方案数。

如果我们有了 \(f(l,r)\),那么一次询问 \([ql,qr]\) 是要求 \(\sum_{x\ge ql,y\le qr}f(x,y)\) 的和,其实就是一个二位数点问题。

  • 考虑非 \(0\)\(f(l,r)\) 有几个。

因为起点终点固定,那么一定 \(a_l\mid a_r\)。所以合法数量是 \(\sum div(n)\) 个,也就是调和级数 \(\mathcal{O}(n\ln n)\) 级别。

  • 对于单个的 \(f(l,r)\),怎么求。

可以固定左端点或者右端点。固定左端点 \(l\) 更加容易,因为合法的右端点 \(r\) 是找到 \(a_l\) 的倍数,而不是找 \(a_r\) 的因数。转移方程是 \(f(l,r)=\sum_{r'<r}f(l,r')[a_{r'}\mid a_r]\)。但是这个又要找因数了,所以考虑把习惯的 pull 改成 push,即对于 \(f(l,r)\) 考虑他的贡献。这样,他对 \(f(l,r')\) 其中 \(a_r\mid a_{r'},r<r'\) 有贡献。

因此我们有了一个 \(\mathcal{O}(n\ln^2n)\) 的做法。

  • 二维数点的写法。

可以无脑的全部离线下来排序以后 bit 维护,但是发现其实可以从大到小枚举 \(f(l,r)\)\(l\) 的过程中就把他解决掉,这样常数较小并且空间小、更好写。

因此得到了一个时空较为优秀的做法。

submission

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.ryyt.cn/news/63523.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈,一经查实,立即删除!

相关文章

程序员职业发展之路思考:工程师的等级阶梯

德雷福斯模型:新手到专家 德雷福斯模型(Dreyfus model)是在 1980 年,Dreyfus 兄弟共同提出的技能习得模型。 它是一个技能习得的阶梯模型,也可以用来考察行业技术能手的分级。该模型由上而下分成:专家、精通者、胜任者、高级新手、新手五个等级,越到上面人数占比越少。新…

2024 人工智能学习内容

第六组思维导图:图形的认识

04. 流程控制

一、流程控制流程控制就是用来控制程序运行中各语句执行顺序的语句。基本的流程结构为:顺序结构,分支结构(或称选择结构),循环结构。顺序结构:程序自上到下执行,中间没有任何判断和跳转; 分支结构:根据条件,选择性的执行某段代码,有 if……else 和 switch……case 两…

CentOS 7 虚拟机连接网络

CentOS 7 虚拟机连接网络 检查网络 ping www.baidu.com切换 root 用户 su查看网卡名 ip addr激活网卡 vim /etc/sysconfig/network-scripts/ifcfg-ens33重启网络 service network restart

execve

目录glibc glibc execve() 执行由 pathname 指定的程序。这会导致当前正在被调用进程运行的程序被一个新程序替换,且该新程序会重新初始化栈、堆,以及(已初始化和未初始化的)数据段。

freeRTOS源码解析4--tasks.c 5

4.2.13 继续任务--vTaskResume 接口:void vTaskResume( TaskHandle_t xTaskToResume )形参1:xTaskToResume ,想要继续的任务handle; 首先是vTaskResume调用的一个内部函数:static BaseType_t prvTaskIsTaskSuspended( const TaskHandle_t xTask ),用于检查任务是否是挂起…

MySQL 必知概念

Delete、Drop 和 Truncatedelete、truncate 仅仅删除表里面的数据,drop会把表的结构也删除 delete 是 DML 语句,操作完成后,可以回滚,truncate 和 drop 是 DDL 语句,删除之后立即生效,不能回滚 执行效率:drop > truncate > deleteMyISAM 与 InnoDBInnoDB 支持事务…

视野修炼-技术周刊第102期 | js 编译运行C

① Bun 现在允许直接在js中直接编译运行 C ! ② caniuse-cli ③ SSL证书管理工具 ④ 好的重构与坏的重构 ⑤ sisi - 命令行图片检索工具 ⑥ cvbee.ai - AI 简历生成欢迎来到第 102 期的【视野修炼 - 技术周刊】,下面是本期的精选内容简介 🔥强烈推荐Bun 现在允许直接在js中…