题解:P6009 [USACO20JAN] Non-Decreasing Subsequences P

news/2026/1/21 21:28:30/文章来源:https://www.cnblogs.com/Pengzt/p/-/P6009
Problem

Bessie 最近参加了一场 USACO 竞赛,遇到了以下问题。当然 Bessie 知道怎么做。那你呢?

考虑一个仅由范围在 \(1 \ldots K\)\(1 \leq K \leq 20\))之间的整数组成的长为 \(N\) 的序列 \(A_1,A_2, \ldots ,A_N\)\(1 \leq N \leq 5 \times 10^4\))。给定 \(Q\)\(1 \leq Q \leq 2 \times 10^5\) )个形式为 \([L_i,R_i]\)\(1 \leq L_i \leq R_i \leq N\))的询问。对于每个询问,计算 \(A_{L_i},A_{L_i+1}, \ldots ,A_{R_i}\) 中不下降子序列的数量模 \(10^9+7\) 的余数。

\(A_L,\ldots ,A_R\) 的一个不下降子序列是一组索引 (\(j_1,j_2, \ldots ,j_x\)),满足 \(L\le j_1<j_2<\ldots<j_x\le R\) 以及 \(A_{j_1}\le A_{j_2}\le \ldots \le A_{j_x}\)。确保你考虑了空子序列!

Sol

\(f_{i,j}\) 为考虑前 \(i\) 个,子序列结尾值为 \(j\) 方案数。有转移 \(f_{i, a_i} = f_{i-1, a_i} + \sum_{j \le a_i} f_{i-1, j}\),对于 \(j \ne a_i\)\(f_{i, j} = f_{i - 1, j}\)\(j\) 这一维很小,考虑矩阵优化。转移矩阵 \(A\) 等于:

\[\begin{bmatrix} 1&&&&&&& \\ &1&&&&&& \\ &&1&&&&& \\ &&&\ddots&&&&\\ 1&1&\dots&1&2&0&\cdots&0\\ &&&&&1&&\\ &&&&&&\ddots&\\ &&&&&&&1\\ \end{bmatrix} \]

推一下可以简单的得到逆矩阵。即单位矩阵第 \(a_i\) 行前面 \(a_i-1\) 个都是 \(-\frac12\) 然后剩下的是单位矩阵。直接做矩阵的前缀(逆)积是 \(nk^3\) 无法接受。发现有值的位置仅 \(O(k)\) 个,可以优化到 \(O(nk^2)\)。查询可以用 base 来乘是 \(k^2\),可以前缀和做到 \(O(k)\)

假如没有逆矩阵怎么做?

线段树维护矩阵是 \(O(nk^3)-O(k^2\log n)\)。猫树是 \(O(nk^3\log)-O(qk^2)\)。若使用分块减少预处理量,散点转移前缀和,也难以通过。

换个思路,直接使用线段树维护。节点存储开始为 \(x\),结束为 \(y\) 的答案。使用前缀和合并减到 \(O(k^2)\)。然后再使用猫树。空间 \(O(nk^2)\) 可以通过离线逐块处理(即变成分治)做到 \(O(k^2\log n)\)。时间复杂度 \(O(nk^2\log n + qk^2)\)

Code

代码是写的逆矩阵的。远古代码,还请见谅。

#include<bits/stdc++.h>
#define pb push_back
#define ios ios::sync_with_stdio(0); cin.tie(0);
using namespace std;
typedef long long ll;
typedef pair<int, int> pii;
const int inf = 1e9 + 7, infi32 = 2147483647, mod = 1e9 + 7;
const ll INF = 1e18;const int N = 5e4 + 10, MAXK = 20 + 1, inv2 = (mod + 1) / 2;
int n, K, Q;
int a[N], sp[N][MAXK];
struct Matrix {int a[MAXK][MAXK];
} pre[N], ipre[N];int main() {ioscin >> n >> K;for (int i = 1; i <= n; i++) cin >> a[i];for (int i = 0; i <= K; i++)pre[0].a[i][i] = ipre[0].a[i][i] = 1;for (int i = 1; i <= n; i++) {pre[i] = pre[i - 1]; ipre[i] = ipre[i - 1];for (int j = 0; j <= K; j++)for (int k = 0; k <= a[i]; k++)pre[i].a[j][a[i]] = (pre[i].a[j][a[i]] + pre[i - 1].a[j][k]) % mod;for (int j = 0; j <= a[i]; j++)for (int k = 0; k <= K; k++)ipre[i].a[j][k] = (ipre[i].a[j][k] + 1ll * ipre[i - 1].a[a[i]][k] * (mod - inv2) % mod) % mod;for (int j = 0; j <= K; j++)for (int k = 0; k <= K; k++)sp[i][j] = (sp[i][j] + pre[i].a[j][k]) % mod;}cin >> Q;while (Q--) {int l, r, ans = 0; cin >> l >> r;for (int i = 0; i <= K; i++) ans = (ans + 1ll * ipre[l - 1].a[0][i] * sp[r][i] % mod) % mod;cout << ans << "\n";}return 0;
}

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

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

相关文章

【计算机毕设】Python高校学生学业预警系统论文

&#x1f49f;博主&#xff1a;程序员小俊&#xff1a;CSDN作者、博客专家、全栈领域优质创作者 &#x1f49f;专注于计算机毕业设计&#xff0c;大数据、深度学习、Java、小程序、python、安卓等技术领域 &#x1f4f2;文章末尾获取源码数据库 &#x1f308;还有大家在毕设选题…

期刊论文创作不再难!虎贲等考 AI 解锁从创作到见刊的高效路径

做科研、评职称、毕业升学&#xff0c;绕不开的就是期刊论文&#xff01;可多少人卡在选题反复碰壁、文献梳理头大、格式排版磨人、投稿石沉大海的困境里&#xff1f;熬了几个月写的论文&#xff0c;要么因和期刊调性不符被秒拒&#xff0c;要么因格式细节疏漏反复返修&#xf…

【珍藏必读】Dify vs Coze:大模型开发平台全方位对比,从架构到部署助你快速选型

随着 Coze 的开源&#xff0c;很多圈内的小伙伴猜测会对 Dify 造成直接威胁&#xff0c;也看到不少关于本地部署 Coze 的例子。 本文从项目代码出发&#xff0c;从产品理念&#xff0c;架构设计&#xff0c;应用开发&#xff0c;技术栈对比&#xff0c;部署&#xff0c;生态&a…

我的第一个公开实战项目(XXX 用户中心系统)

程序员必会的实战项目(XXX用户中心系统)需求分析登录 / 注册 用户管理(仅管理员可见)对用户的查询或者修改 用户校验(仅系统用户)技术选型 前端:三件套 + React + 组件库 Ant Design + Umi + Ant Design Pro (现…

学术写作利器:9款免费用论文查重工具,每天无限次检测,省时又省力

核心工具对比速览 工具名称 查重速度 降重效果 特色功能 适用场景 aicheck 极快 重复率可降30% 专业术语保留 高重复率紧急处理 aibiye 中等 逻辑优化明显 学术表达增强 提升论文质量 askpaper 快 结构保持完整 多语言支持 外文论文降重 秒篇 极快 上下文…

【干货收藏】智能体开发实战:企业级架构设计与实现难点攻克

“ 总之&#xff0c;智能体开发的理论很简单&#xff1b;但其真正的难点却在具体的落地实现。” 智能体开发是目前大模型应用的主流方向之一&#xff0c;但由于大模型的不稳定性导致智能体开发困难重重&#xff0c;特别是构建能够稳定运行的智能体&#xff0c;更是难上加难。 今…

【计算机毕设】Python高校社团学生会管理系统

&#x1f49f;博主&#xff1a;程序员小俊&#xff1a;CSDN作者、博客专家、全栈领域优质创作者 &#x1f49f;专注于计算机毕业设计&#xff0c;大数据、深度学习、Java、小程序、python、安卓等技术领域 &#x1f4f2;文章末尾获取源码数据库 &#x1f308;还有大家在毕设选题…

POMDP在AI中的应用前景与挑战

POMDP在AI中的应用前景与挑战 关键词:POMDP、人工智能、应用前景、挑战、部分可观测马尔可夫决策过程 摘要:本文深入探讨了部分可观测马尔可夫决策过程(POMDP)在人工智能领域的应用前景与挑战。首先介绍了POMDP的背景知识,包括目的、预期读者、文档结构和相关术语。接着阐…

导师严选2026 TOP8 AI论文平台:专科生毕业论文写作全测评

导师严选2026 TOP8 AI论文平台&#xff1a;专科生毕业论文写作全测评 2026年AI论文平台测评&#xff1a;专科生如何高效完成毕业论文 随着人工智能技术的不断进步&#xff0c;越来越多的专科生开始借助AI论文平台完成毕业论文写作。然而&#xff0c;面对市场上五花八门的工具…

精选9款不花钱的论文查重工具,每日可无限次检测,学术研究更顺畅

核心工具对比速览 工具名称 查重速度 降重效果 特色功能 适用场景 aicheck 极快 重复率可降30% 专业术语保留 高重复率紧急处理 aibiye 中等 逻辑优化明显 学术表达增强 提升论文质量 askpaper 快 结构保持完整 多语言支持 外文论文降重 秒篇 极快 上下文…

分享一个开源的商城系统:SpringBoot + Vue +Redis + MyBatis 前后端分离技术栈

前言 之前在业余时间开发过一个商城管理系统&#xff0c;技术栈是目前比较主流的前后端分离。前端主要使用的是Vue框架、后端是SpringBoot框架、中间件采用的是Redis、数据库采用的是Mysql、持久层框架是Mybatis。目前代码已经开源到GitHub、对初学者来说有一定的参考价值~ 更…

9大免费论文查重工具推荐,每天不限次数使用,让学术写作更轻松高效

核心工具对比速览 工具名称 查重速度 降重效果 特色功能 适用场景 aicheck 极快 重复率可降30% 专业术语保留 高重复率紧急处理 aibiye 中等 逻辑优化明显 学术表达增强 提升论文质量 askpaper 快 结构保持完整 多语言支持 外文论文降重 秒篇 极快 上下文…

7款AI论文写作神器解析:如何快速提升效率并避免论文重复问题

AI写论文工具排名&#xff1a;7大模型查重率低技巧推荐 7大AI论文工具核心对比 工具名称 核心功能 查重优化 适用场景 效率评分 AiBiye 论文全流程辅助 智能降重 从选题到定稿 ★★★★★ AiCheck 查重与降重 深度降重算法 论文修改阶段 ★★★★☆ AskPaper …

基于stm32单片机的智能灌溉系统

目录 系统概述核心硬件组成软件设计要点典型工作流程应用优势 源码文档获取/同行可拿货,招校园代理 &#xff1a;文章底部获取博主联系方式&#xff01; 系统概述 基于STM32单片机的智能灌溉系统是一种利用嵌入式技术、传感器和自动控制算法实现的精准农业解决方案。该系统通过…

AI论文写作工具精选7款:高效撰写与降低重复率的实用技巧分享

AI写论文工具排名&#xff1a;7大模型查重率低技巧推荐 7大AI论文工具核心对比 工具名称 核心功能 查重优化 适用场景 效率评分 AiBiye 论文全流程辅助 智能降重 从选题到定稿 ★★★★★ AiCheck 查重与降重 深度降重算法 论文修改阶段 ★★★★☆ AskPaper 文…

基于STM32单片机的智慧病房系统

目录 STM32智慧病房系统概述核心功能模块硬件设计软件架构应用优势典型代码片段&#xff08;环境监测&#xff09; 源码文档获取/同行可拿货,招校园代理 &#xff1a;文章底部获取博主联系方式&#xff01; STM32智慧病房系统概述 智慧病房系统基于STM32单片机设计&#xff0c…

零成本论文查重工具精选9款,支持每日无限次检测,学术写作更无忧

核心工具对比速览 工具名称 查重速度 降重效果 特色功能 适用场景 aicheck 极快 重复率可降30% 专业术语保留 高重复率紧急处理 aibiye 中等 逻辑优化明显 学术表达增强 提升论文质量 askpaper 快 结构保持完整 多语言支持 外文论文降重 秒篇 极快 上下文…

基于stm32单片机的智能充电宝系统

目录系统概述硬件设计软件设计核心功能应用场景开发工具源码文档获取/同行可拿货,招校园代理 &#xff1a;文章底部获取博主联系方式&#xff01;系统概述 基于STM32单片机的智能充电宝系统是一种集成了电池管理、充放电控制、状态监测和用户交互功能的便携式设备。STM32作为主…

电商行业中的多维数据分析模型

电商行业中的多维数据分析模型 关键词:电商行业、多维数据分析模型、数据仓库、OLAP、数据挖掘 摘要:本文聚焦于电商行业中的多维数据分析模型。随着电商业务的迅猛发展,海量数据不断产生,如何从这些数据中提取有价值的信息以支持决策成为关键。多维数据分析模型为电商企业…

STL练习

2058: [STL训练]Whos in the Middle 题目描述 FJ is surveying his herd to find the most average cow.He wants to know how much milk this median cow gives:half of the cows give as much or more than the median; half give as much or less. Given an odd number …