一下子没做出来的题

news/2025/1/10 22:57:58/文章来源:https://www.cnblogs.com/IAKCTSC/p/18664856

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/867382.html

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

相关文章

django python manage.py报错TimeoutError: [WinError 10060] A connection attempt failed

diango python manage.py报错 TimeoutError: [WinError 10060] A connection attempt failed because the connected party did not properly respond after a period of time, or established connection failed because connected host has failed to respond 加个代理即可

4. gazebo仿真环境中添加robotiq 2f 140的gripper_controller控制器

原文地址: gazebo仿真环境中添加robotiq 2f 140的gripper_controller控制器 gazebo仿真环境中添加robotiq 2f 140的gripper_controller控制器搭建环境: ubuntu: 20.04ros: Noneticsensor: robotiq_ft300gripper: robotiq_2f_140_gripperUR: UR3reasense: D435i 通过下面几篇博…

tomcat9.0下载安装及配置图文教程

下载 官网:http://tomcat.apache.org/ 选择下载64-Bit Windows zip(Win64)2.解压到任意一个盘,如,D:\apache-tomcat-9.0.98 3.设置环境变量 CATALINA_HOME:D:\apache-tomcat-9.0.98 找到系统变量Path,添加:%CATALINA_HOME%\bin验证是否配置成功 进入Windows命令行窗口,…

3. ur3+robotiq ft sensor+robotiq 2f 140+realsense d435i配置rviz,gazebo仿真环境

原文地址: ur3+robotiq ft sensor+robotiq 2f 140+realsense d435i配置rviz,gazebo仿真环境 ur3+robotiq ft sensor+robotiq 2f 140+realsense d435i配置rviz,gazebo仿真环境搭建环境: ubuntu: 20.04ros: Noneticsensor: robotiq_ft300gripper: robotiq_2f_140_gripperUR: U…

01 Java入门

1972年C诞生贴近硬件、运行极快、效率较高 操作系统、编译器、数据库、网络系统等 指针和内存管理1982年C++诞生面向对象 兼容C 图形领域、游戏等1995年Java诞生简单性 面向对象 可移植性 高性能 分布式 动态性 多线程 安全性 健壮性Java三大版本JavaSE:标准版(桌面程序、控制…

2. ur3+robotiq ft sensor+robotiq 2f 140配置gazebo仿真环境

原文地址: ur3+robotiq ft sensor+robotiq 2f 140配置gazebo仿真环境 ur3+robotiq ft sensor+robotiq 2f 140配置gazebo仿真环境搭建环境: ubuntu: 20.04ros: Noneticsensor: robotiq_ft300gripper: robotiq_2f_140_gripperUR: UR3 通过上一篇博客配置好ur3、力传感器和roboti…

Git学习遇到的抽风问题记录

学习git commit和git add的区别的时候,一不小心git commit 没有加“-m”,进入了一个vim配置页面:搞了半天死活出不来,而且担心修改了不该动的东西 解决办法:输入“:”然后输入qa!//放弃任何更改并退出 解决!

咸鱼学习第一天

markdown以及编辑器obsidian的学习 1 创建新笔记Ctrl+n Ctrl+o (可以快速打开需要的笔记;可以加文档名+笔记标题)2 文档属性设置 三个“---”可以添加日期、别名、标签 3 最常用语言一个’-‘加一个空格是一个小圆点 几个“#”+一空格就是几级标题 链接设置①:如我要在…

BurpSuite实操之重发器功能使用

手动操作来触发单独的HTTP请求,并进行应用程序响应的工具,此功能用于根据不同的情况修改和发送相后的请求并分析,通过调整Request的参数,不断尝试,通过Response查看状态,从而节省在浏览器中操作的时间。 在渗透测试过程中,我们经常使用Repeater进行请求与响应的消息验证…

G1原理—3.G1是如何提升垃圾回收效率

大纲 1.G1为了提升GC的效率设计了哪些核心机制 2.G1中的记忆集是什么 3.G1中的位图和卡表 4.记忆集和卡表有什么关系 5.RSet记忆集是怎么更新的 6.DCQ机制的底层原理是怎样的 7.DCQS机制及GC线程对DCQ的处理提升G1垃圾回收器GC效率的黑科技 G1设计了一套TLAB机制 + 快速分配机制…

1.10日学习笔记之C++的类

类其实就是一种数据类型,和结构相似。类的成员包括两类,属性(成员变量)和行为(成员函数)。 成员函数定义的两种方法(可能有多种,觉得这两种比较常用) 1、将类的成员函数定义在类体内,如 class CPerson {public: short age;short getage(){return age;}};2、将类的成…

着火智能监测识别摄像机

着火智能监测识别摄像机利用了先进的图像处理技术和人工智能算法,能够快速、准确地检测环境中的着火点,从而及时采取必要的安全措施。其工作原理如下:首先,摄像机配备高清摄像头,能够实时捕捉并传输环境图像。这些图像通过内置的处理单元,进行高效处理和分析。其次,利用…