2023.1.29 闲话

洛谷的 /discuss/563971 给出了一个比较有意思的题 .

rpoks

以下是我想象力范围内的做法,太难的不会 .

有错重 D 谢谢 .

题面

静态区间等幂和(编码 rpoks)

给一个序列 {an}q 组询问,每次给三个整数 l,r,k,求 i=lraik,对 998244353 取模 .

复杂度不算值域 .

A. 一般情况

Algorithm 1. Θ(nqlogk)

暴力快速幂 .

Algorithm 2. Θ(nk)

离线下来对于每个 k 做 .

Algorithm 3. Θ(nqlog2n)

joke3579 早就指出

i=1naik=[zk]i=1n11aiz

分治 NTT 暴力计算即可 .

Algorithm 4. Θ(nlog2n+nkqlogn)

对于 Algorithm 3 分块,块内用分治 NTT 求出答案的前 k 项,多点求值求出 1k 的答案,查询的时候块内暴力,块间查表即可 .

令块长为 B,则时间复杂度 Θ(nB(Blog2n+klog2n)+qB),取块长为 B=lognnkq 即可 .

我还不知道怎么不用多点求值做 .

B. 限制 k

以下令 m=k .

Algorithm 1. Θ(nmq)

根据 A 情况的 Algorithm 2 的做法,这里本质不同的 k 最多 2m 个,于是算法的复杂度变成 Θ(nmq) .

Algorithm 2. Θ(nm+q)

根号分治,km 的时候对所有 k 打前缀和表,询问直接查 .

k>m 只会有不超过 m 组,直接暴力 .

Algorithm 3. Θ(nlog2n+qnm/log3n)

根据 A 情况的 Algorithm 4,阈值分治,kC 的预处理,k>C 的询问的时候现算 .

令块长为 B,则时间复杂度 Θ(nB(Blog2n+Clogn)+nBnCmlogn+qB) .

B=nmlog3nC=nmlogn 即可 .

posted @   yspm  阅读(86)  评论(2编辑  收藏  举报
相关博文:
阅读排行:
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】
😅​
点击右上角即可分享
微信分享提示