D. [CSP-J二十连测第九套 ] --T4--计数(count)

news/2025/1/11 10:34:58/文章来源:https://www.cnblogs.com/IAKCTSC/p/18665330

D. [CSP-J二十连测第九套 ] --T4--计数(count)
这道题是一道很好的dp。
假设留下的序列是 \(b\),首先有个4个性质:

  • 最后剩下的是原序列 \(a\) 的子序列。
  • 对于 \(b_1\),他在原序列中假设位置为 \(x\),那么从 \(a_1\) \(a_x\) 的最小值必须是 \(b_1\)
  • 对于 \(b_n\),他在原序列中假设位置是 \(y\),那么从 \(a_y\)\(a_n\) 的最小值必须是 \(b_n\)
  • 对于 \(b_i\)\(b_{i+1}\),他们所对应原序列的位置之间的值的最小值必须是 \(b_i\)\(b_{i+1}\)

所以,对于以上情况,我们可以 dp,设 \(f_i\) 表示以 \(i\) 为结尾的方案数有多少个,我们找到他左边第一个比他小的 \(pos_i\) 位置,至于合法情况有两种。

  1. 如果 \(j\in[pos_i+1,i-1]\),那么这一个区间任意一个位置均可转移,用前缀和优化。
  2. 如果 \(j\in[1,pos_i]\),那么所有 \(a_j>a_i\) 位置的 \(j\) 都不合法,也就是说 \(\min_{k=j}^ia_k=a_j\)。由此可看,另一部分的贡献为 \(f_{pos_i}+f_{pos_{pos_i}},...\),用 \(g\) 数组去存,每一次更新即可。(这一块处理很妙,我没想到)
#include<bits/stdc++.h>
using namespace std;
const int N=3e5+5,MOD=998244353;
int n,s[N],top,a[N],f[N],ans,mn=1e9;
int l[N],r[N],pre[N],g[N];
void file()
{#ifdef ONLINE_JUDGEfreopen("count.in","r",stdin);freopen("count.out","w",stdout);#endif
}
int cal(int x,int y)
{return ((x+y)%MOD+MOD)%MOD;
}
int main()
{file();cin>>n;for(int i=1;i<=n;i++) cin>>a[i];s[top=0]=0;for(int i=1;i<=n;i++){while(top&&a[s[top]]>a[i]) top--;l[i]=s[top];s[++top]=i;}s[top=0]=n+1;for(int i=n;i;i--){while(top&&a[s[top]]>a[i]) top--;r[i]=s[top];s[++top]=i;}f[0]=pre[0]=1;for(int i=1;i<=n;i++){if(!l[i]) f[i]=pre[i-1];else{f[i]=cal(pre[i-1],-pre[l[i]]);f[i]=cal(f[i],g[l[i]]);}pre[i]=cal(pre[i-1],f[i]);g[i]=cal(g[l[i]],f[i]);}for(int i=1;i<=n;i++) if(r[i]==n+1) ans=cal(ans,f[i]);cout<<ans<<"\n";return 0;
}

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

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

相关文章

信息安全数学基础-期末(第八章)

群 定义 半群的定义:设S是一个具有结合法的非空集合.如果S中有一个元素e;使得对S中所有元素a,都有 ea=ae=a. 单位元的定义: 性质:设 S是一个有单位元的半群, 则对 S 中的任意可逆元 a, 其逆元 a 是唯的 群的定义: 子群 定义: 同态和同构 定义: 单射、满射、双射: 单射确…

Python/Conda环境配置

Python/conda环境配置 需用: Anaconda Pycharm 均在:U23\00公共空间\软件安装包\Python 步骤 1.安装Anaconda (最好安装在英文路径下,避免不必要的问题) 注意:一定要勾选红框选项!2.打开命令窗 开始--Anaconda—Anaconda Prompt (Anaconda) 初始环境为--base 3.创建环…

Mac电脑必备的菜单栏管理软件 Bartender 5

Mac电脑必备的菜单栏管理软件 Bartender 5 介绍 Bartender 5,是一款菜单栏管理软件,可以帮助用户隐藏、组织和自定义Mac菜单栏中的图标和通知。使用Bartender 5,用户可以将不常用的图标隐藏起来,使菜单栏保持整洁,并只显示重要的通知和信息。此外,Bartender 5还支持自定义…

2024年总结及2025年目标之关键字【稳进】

2024年总结及2025年目标之关键字【稳进】1. 感受 时光荏苒,都731天(2年时间)下来了,从第一年的【坚持】,到第二年的【提速】,定目标,现在回头看,还是那句话【事非经过不知难】,那又怎么样呢,再难不是也过来了吗:D,接下来就是【而今迈步从头越】!读书时间大增,尤其…

现货黄金

可能WXY反弹 短期见顶了 2695-2700阻力 支撑2665-2670

深入解析 Spring AI 系列:以OpenAI与Moonshot案例为例寻找共同点

今天,我们将重点探讨对接的业务逻辑。为了帮助大家更直观地掌握其中的规律性,我将通过对比OpenAI与《月之暗面》中的Moonshot两个案例来阐述这一点。通过这样的对比,大家可以更清晰地看到,这些对接业务的整体框架其实非常相似。换句话说,我们要做的工作只是其中的一小部分…

硬盘检测工具|数据恢复

硬盘检测工具设置 # 在settings中开启如下配置,而后关闭数据恢复

VMware ESXi 8.0U3c macOS Unlocker OEM BIOS Huawei (华为) 定制版

VMware ESXi 8.0U3c macOS Unlocker & OEM BIOS Huawei (华为) 定制版VMware ESXi 8.0U3c macOS Unlocker & OEM BIOS Huawei (华为) 定制版 ESXi 8.0U3c 标准版,Dell (戴尔)、HPE (慧与)、Lenovo (联想)、Inspur (浪潮)、Cisco (思科)、Hitachi (日立)、Fujitsu (富士…

【Go编程】流程控制

一、流程控制的作用: 流程控制语句是用来控制程序中各语句执行顺序的语句,可以把语句组合成能完成一定功能的小逻辑模块。 二、控制语句的分类: 控制语句分为三类:顺序、选择和循环。 “顺序结构”代表“先执行a,再执行b”的逻辑。 “条件判断结构”代表“如果…,则…”的…

在CDN上搭建支持反向代理的C2服务器(下)

免责声明: 本文技术只做研究之用,禁止用来从事非法用途,如有使用文章中的技术从事非法活动,一切后果由使用者自负,与作者无关。一、摘要 在上一篇文章中, 完成了Microsoft Azure 上的环境准备工作, 已经成功安装并配置了用于 Nginx 反向代理的虚拟机(VM)和用于 Cobalt Strike…

在CDN上搭建支持反向代理的C2服务器(上)

免责声明: 本文技术只做研究之用,禁止用来从事非法用途,如有使用文章中的技术从事非法活动,一切后果由使用者自负,与作者无关。一、摘要 在本文中,将探讨在微软Azure的CDN网络中使用C2域名和Nginx作为反向代理来构建一个红队基础设施。内容包括:C2域的选择和DNS配置、Cobalt St…

换个 AI 写

被遗忘,无法参与,无法长时间停课,对学校或教练组心存疑虑。每月的考试成绩。为了奥运会,并花费了无法停课的时间,以换取比赛课程的月度考试成绩。他们可以通过宣传来间接提高成绩。在未来的职业发展中,她取得了优异的成绩。缺乏时间,对江平在奥运会上取得优异成绩的怀疑…