QOJ #1823. Permutation CFG

news/2026/1/21 10:36:49/文章来源:https://www.cnblogs.com/Ax-Dea/p/19510266

现在网上找不到题解,QOJ上的论文看不了了,来贡献一篇。

题目链接

\(U(x, s)\) 表示从 \(x\) 一个单独的数开始,进行 \(s\) 次操作后得到的序列。

举个例子,若 \(p = \{1, 4, 3, 2\}\),那么 \(U(4, 0) = \{4\}, U(4, 1) = \{1,4,3,2\}, U(4, 2) = \{1,1,4,3,2,1,3,2,1,2\}\)

将询问的答案记为 \(f(x, k, a, s)\),表示再 \(U(x, s)\) 中前 \(a\) 个数里面数字 \(k\) 的个数。

设序列相加为连接序列,可以发现 \(U(x, s) = \sum\limits_{i = 1} ^ n [p_i\le x]U(p_i, s - 1)\)。所以我们可以把 \(f(x, k, a, s)\) 进行拆分:

\[f(x, k, a, s) = \sum\limits_{i = 1} ^ n [p_i\le x]f(p_i, k, a_i, s - 1) \]

\(U(x, s)\) 的序列长度为 \(g(x, s)\)。这样 \(a_i\) 是容易求出的,具体的,我们把所有满足 \(p_i \le x\)\(p_i\) 按照排列里的顺序拿出来,这样它们的长度依次是 \(g(p_{i_1}, s - 1), g(p_{i_2}, s - 1), \cdots , g(p_{i_m}, s - 1)\),对这个序列进行前缀和,二分出最后一个前缀和小于等于 \(a\) 的位置记为 \(st\),设 \(st\) 之前的前缀和为 \(sum\),那么就可以得出:

\[f(x, k, a, s) = f(p_{i_{st + 1}}, k, a - sum, s - 1) + \sum\limits_{u = 1} ^ {st} f(p_{i_u}, k, g(p_{i_u}, s - 1), s - 1) \]

等式右边第一项扔去 \(s - 1\) 继续计算,第二项形式比较好,考虑快速计算的方法,设 \(h(x, k, s) = f(x, k, g(x, s), s)\)

发现对于一个固定的 \(k\),对于 \(s \ge 1\)\(h\) 有递推式:

\[h(x, k, s) = \sum\limits_{i = 1} ^ {x} h(i, k, s - 1) = h(x - 1, k, s) + h(x, k, s - 1) \]

边界是 \(h(x, k, 0) = [x = k]\)。这是一个经典的格路计数的递推式,对于 \(s\ge 1\) 的情况,\(h(x, k, s)\) 可以看成从格点 \((k, 1)\) 到格点 \((x, s)\) 的路径个数,容易知道答案是 \([x\ge k]{x + s - k - 1\choose s - 1}\)。若 \(s = 0\),根据边界条件计算即可。

好了,现在思路大体有了,考虑如何实现。

首先是 \(g(x, s)\) 的计算,和 \(h\) 类似 \(g(x, s) = g(x - 1, s) + g(x, s - 1)\)

记题目里面的 \(s\)\(S\)。那么每个询问就是 \(f(n, k, a, S)\)

我们从最大的 \(s = S\) 开始处理,一直到 \(s = 0\) 结束。

首先考虑如何将 \(f(x, k, a, s)\) 拆分成我们想要的形式。将询问按照 \(x\) 从小到大排序,设 \(rk_{p_i} = i\),在处理 \(x\) 的询问前,将所有满足 \(u \le x\)\(u\)\(g(u, s - 1)\) 放到下标为 \(rk_u\) 的位置上,快速求前缀和二分可以用树状数组结合倍增实现。

我们记录 \(\tau(x, i_{st}, k, s) = \sum\limits_{u = 1} ^ {st} h(p_{i_u}, k, s) = \sum\limits_{u = 1} ^ {st} [p_{i_u}\ge k]{p_{i_u} + s - k - 1\choose s - 1}\) 作为新的查询,但是这不好处理,考虑拆分组合数,使用范德蒙德卷积(其中 \(y\) 代表 \(p_{i_u}\)):

\[{y + s - k - 1\choose s - 1} = \sum\limits_{j = 0} ^ {s - 1}{s -1 - k\choose s - 1 - j}\times {y \choose j} \]

这样求和式中的左右两项是独立的,每次查询时可以枚举 \(j\),用数据结构求出 \(\sum{p_t\choose j}\),然后可以数点了。

但是要注意这里组合数有可能上指标是负的,这也要考虑进去,计算时使用上指标反转即可:

\[{n\choose r} = (-1) ^ r {r - n - 1\choose r} \]

考虑询问 \(\tau(x, r, k, s)\) 对点的限制:\(y \ge k, y\le x, rk_y\le r\)。直接二维数点即可。

时间复杂度 \(\mathcal O(s(n + q)\log n)\)

mint inv[N], fac[N], ifac[N];
inline mint C(int n, int r) {if (r < 0 || (n >= 0 && r > n)) return mint(0);if (n < 0) {if (r & 1) return mint(Mod - 1) * C(r - n - 1, r);else return C(r - n - 1, r);}return fac[n] * ifac[n - r] * ifac[r];
}
inline void Invtable(int n) {inv[1] = mint(1);forn (i, 2, n) inv[i] = mint(Mod - Mod / i) * inv[Mod % i];fac[0] = 1, ifac[0] = 1;forn (i, 1, n) fac[i] = fac[i - 1] * mint(i), ifac[i] = ifac[i - 1] * inv[i];
}
struct BIT {ll val[N]; int R, Lg;inline void init(int lim) { forn (i, 1, R) val[i] = 0; R = lim, Lg = log2(lim); }inline void upd(int p, ll k) { while (p <= R) val[p] += k, p += p & -p; }inline ll qry(int p) { ll r = 0; while (p > 0) r += val[p], p -= p & -p; return r; }inline pair<int, ll> qs(ll t) {ll sum = 0; int st = 0;form (i, Lg, 0) if ((st | (1 << i)) <= R && sum + val[st | (1 << i)] <= t) st |= 1 << i, sum += val[st];assert(sum <= t);return make_pair(st, sum);}
} T;
struct mBIT {mint val[N]; int R;inline void init(int lim) { forn (i, 1, R) val[i] = 0; R = lim; }inline void upd(int p, mint k) { while (p <= R) val[p] += k, p += p & -p; }inline mint qry(int p) { mint r = 0; while (p > 0) r += val[p], p -= p & -p; return r; }inline mint qry(int l, int r) { return qry(r) - qry(l - 1); }
} Tm[6];
int rk[N];
struct Q1 {int id, k, a;Q1 () {}Q1 (int _i, int _k, int _a) : id(_i), k(_k), a(_a) {}
};
struct Q2 {int id, k, l;Q2 () {}Q2 (int _i, int _k, int _l) : id(_i), k(_k), l(_l) {}
};
int n, S, q, p[N]; mint ans[M]; ll g[N][6];
vector<Q1> E[N], R[N]; vector<Q2> G[N];
int vis[N];
inline void solve() {cin >> n >> S >> q;Invtable(max(n, S));forn (i, 1, n) cin >> p[i], rk[p[i]] = i;forn (i, 1, n) g[i][0] = 1;forn (s, 1, S) forn (i, 1, n) g[i][s] = min(g[i - 1][s] + g[i][s - 1], INF);forn (i, 1, q) {int k, a;cin >> k >> a;E[n].push_back(Q1(i, k, a));}form (s, S - 1, 0) {T.init(n);forn (i, 1, n) {T.upd(rk[i], g[i][s]);for (Q1 e : E[i]) {auto res = T.qs(e.a);int st = res.first;ll sum = res.second;if (st) {if (s) G[st].push_back(Q2(e.id, e.k, i));else G[i].push_back(Q2(e.id, e.k, st));}if (e.a - sum) R[p[st + 1]].push_back(Q1(e.id, e.k, e.a - sum));} }if (s == 0) {forn (i, 1, n) {vis[i] = 1;for (Q2 e : G[i]) if (vis[e.k] && rk[e.k] <= e.l) ans[e.id] += mint(1);}break ;}forn (i, 1, n) swap(E[i], R[i]), R[i].clear();rep (u, 0, s) Tm[u].init(n);forn (i, 1, n) {rep (j, 0, s) Tm[j].upd(p[i], C(p[i], j));for (Q2 e : G[i]) if (e.k <= e.l) rep (j, 0, s) ans[e.id] += C(s - 1 - e.k, s - 1 - j) * Tm[j].qry(e.k, e.l);}forn (i, 1, n) G[i].clear();}forn (i, 1, q) cout << ans[i].r << '\n';
}

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

AI配音降本增效:CosyVoice2-0.5B批量生成实战指南

AI配音降本增效&#xff1a;CosyVoice2-0.5B批量生成实战指南 1. 引言&#xff1a;为什么你需要关注AI语音合成&#xff1f; 你有没有遇到过这样的问题&#xff1a;做短视频需要配音&#xff0c;但请人录一次成本高、周期长&#xff1b;写好的文章想转成有声内容&#xff0c;…

Hunyuan-MT-7B连接超时?反向代理配置修复网页访问问题

Hunyuan-MT-7B连接超时&#xff1f;反向代理配置修复网页访问问题 1. 问题背景&#xff1a;Hunyuan-MT-7B-WEBUI 访问异常 你是不是也遇到过这种情况&#xff1a;刚部署完腾讯混元开源的 Hunyuan-MT-7B 翻译模型&#xff0c;满怀期待地点击“网页推理”按钮&#xff0c;结果浏…

AI搜索优化哪家技术强?2026年AI搜索优化推荐与排名,解决语义理解与适配效率痛点

随着生成式人工智能深度重塑用户获取信息与决策的路径,AI搜索优化已从营销领域的创新尝试,演变为决定品牌未来五年市场地位的关键战略。数据显示,2025年中国AI搜索优化相关市场规模增长迅猛,大量企业已将其纳入核心…

零基础学REQABLE:10分钟掌握抓包核心技巧

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容&#xff1a; 创建一个交互式REQABLE新手教程应用&#xff0c;通过步骤式引导教会用户完成基础抓包操作。包含模拟网络环境&#xff0c;让用户可以在安全环境中练习抓包。要求每个步骤有图文说明…

Paraformer-large法律行业应用:庭审录音精准转写实战案例

Paraformer-large法律行业应用&#xff1a;庭审录音精准转写实战案例 1. 庭审场景下的语音转写痛点 在司法实践中&#xff0c;庭审过程往往持续数小时&#xff0c;涉及大量口语化表达、专业术语和多人交替发言。传统的人工记录方式不仅耗时耗力&#xff0c;还容易遗漏关键信息…

Git作者信息总延迟/错位?VS Code插件兼容性避坑清单(基于127个真实项目验证)

第一章&#xff1a;Git作者信息总延迟/错位&#xff1f;VS Code插件兼容性避坑清单&#xff08;基于127个真实项目验证&#xff09;在参与开源协作与团队开发过程中&#xff0c;频繁出现 Git 提交记录中作者信息延迟或错位的问题&#xff0c;尤其在使用 VS Code 及其生态插件时…

YOLO11为何难部署?一文详解常见问题与避坑指南

YOLO11为何难部署&#xff1f;一文详解常见问题与避坑指南 YOLO11作为目标检测领域的新一代算法&#xff0c;凭借其在精度和速度上的双重提升&#xff0c;吸引了大量开发者关注。然而&#xff0c;许多人在尝试将其部署到实际项目中时却发现&#xff1a;理想很丰满&#xff0c;…

张三的声音+李四的情绪?IndexTTS 2.0神奇组合实验

张三的声音李四的情绪&#xff1f;IndexTTS 2.0神奇组合实验 你有没有遇到过这种情况&#xff1a;想给一段动画配音&#xff0c;却找不到声音和情绪都匹配的演员&#xff1f;或者&#xff0c;你想让虚拟主播“愤怒地喊出一句台词”&#xff0c;结果AI生成的语音语气平淡得像在…

【VSCode侧边栏消失怎么办】:5分钟快速找回的3种实用方法

第一章&#xff1a;VSCode侧边栏消失的常见原因分析 Visual Studio Code&#xff08;VSCode&#xff09;作为广受欢迎的代码编辑器&#xff0c;其界面布局的稳定性对开发效率至关重要。侧边栏是文件资源管理、搜索、源码控制等核心功能的入口&#xff0c;一旦意外消失&#xff…

AUTOWARE与AI:自动驾驶开发的新范式

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容&#xff1a; 基于AUTOWARE框架开发一个AI增强的自动驾驶原型系统&#xff0c;要求实现以下功能&#xff1a;1. 使用深度学习模型&#xff08;如YOLOv5&#xff09;进行实时目标检测 2. 集成强化…

Glyph应用场景揭秘:不只是AI绘画那么简单

Glyph应用场景揭秘&#xff1a;不只是AI绘画那么简单 1. 引言&#xff1a;当“看书”变成“看图” 你有没有想过&#xff0c;让大模型理解一本几十万字的小说&#xff0c;其实可以像翻相册一样简单&#xff1f; 这不是科幻。智谱推出的 Glyph 视觉推理大模型&#xff0c;正在…

命令行萌新必看:CLAUDE报错背后的基础知识

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容&#xff1a; 制作交互式命令行学习工具&#xff0c;包含&#xff1a;1) 模拟终端环境 2) 常见错误情景演示 3) 分步指导解决方案。当用户输入CLAUDE时&#xff0c;以动画形式展示系统查找命令的…

零基础学会Maven 3.6.3:从安装到第一个项目

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容&#xff1a; 创建一个面向初学者的Maven 3.6.3教学项目&#xff0c;要求&#xff1a;1) 分步展示Windows/Mac环境安装过程&#xff1b;2) 创建简单的Hello World项目&#xff1b;3) 解释pom.xm…

GPT-OSS-20B输出后处理:结果过滤与增强

GPT-OSS-20B输出后处理&#xff1a;结果过滤与增强 你是否在使用GPT-OSS-20B这类大模型时&#xff0c;发现生成的内容虽然丰富&#xff0c;但偶尔夹杂冗余、重复甚至逻辑混乱的句子&#xff1f;尤其是在通过网页界面进行推理时&#xff0c;原始输出往往不能直接用于生产环境。…

独家披露:企业级VSCode Java开发环境搭建标准流程(附配置模板)

第一章&#xff1a;VSCode Java开发环境搭建前的准备 在开始使用 VSCode 进行 Java 开发之前&#xff0c;必须确保系统具备必要的前置条件。这些准备工作直接影响后续开发环境的稳定性和功能完整性。 确认系统已安装Java Development Kit Java 开发依赖于 JDK&#xff08;Java…

VibeThinker-1.5B费用优化案例:弹性GPU节省50%算力开支

VibeThinker-1.5B费用优化案例&#xff1a;弹性GPU节省50%算力开支 1. 引言&#xff1a;小模型也能大作为 你是否遇到过这样的困境&#xff1a;为了运行一个AI推理任务&#xff0c;不得不租用昂贵的高端GPU服务器&#xff0c;结果发现大部分时间资源都在闲置&#xff1f;尤其…

零基础入门:用SORA 2制作你的第一个AI视频

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容&#xff1a; 设计一个交互式新手教程&#xff0c;引导用户完成使用SORA 2创建简单视频的全过程。教程应包含分步指导、示例素材和即时反馈&#xff0c;确保零基础用户能在30分钟内完成第一个视…

艾体宝方案 | 构建高可靠、低延迟的智能驾驶车云协同中枢

摘要随着智能网联汽车渗透率持续提升&#xff0c;以及相关监管体系与行业标准的逐步完善&#xff0c;车云协同平台正从“增值能力”演进为支撑安全运行与规模化发展的关键基础设施。 一方面&#xff0c;围绕事故事件数据记录&#xff08;EDR&#xff09;及关键信息管理&#xf…

【VSCode设置同步终极指南】:5分钟实现跨设备无缝开发环境迁移

第一章&#xff1a;VSCode设置同步的核心价值与场景 在现代软件开发中&#xff0c;开发者常常需要在多台设备间切换工作环境&#xff0c;例如从办公室的台式机转到家中的笔记本&#xff0c;或在不同项目中使用专用配置的虚拟机。VSCode 设置同步功能通过云端存储用户的配置、扩…

企业如何布局跨境AI搜索?2026年AI搜索营销服务商排名与推荐

由中国领先的行业监测与权威平台《广告主评论》主办、中经总网中经在线(全称中国经济报道)、世界品牌研究院(中国)集团有限公司协办支持的“全球 GEO 厂商评测”,从 GEO 理论奠基、技术实践、创始人背景、技术资质…