首页 > 其他分享 >P10008 [集训队互测 2022] Range Minimum Element

P10008 [集训队互测 2022] Range Minimum Element

时间:2024-08-09 16:07:16浏览次数:15  
标签:int 最小值 合法 -- Range Minimum 110 Element

My Blogs

P10008 [集训队互测 2022] Range Minimum Element

难点在于双射构造。

首先考虑给定了 \(b\) 如何进行判定。从小到大填数 \(x\),每次把能填的地方(\(b_i>x\) 的区间之外)全部填上 \(x\),这样填一定是最优的。合法当且仅当这样生成的序列 \(a\) 对应的 \(b\) 就是 \(b\) 本身。

发现通过这样的生成方式,合法的 \(a\) 和 \(b\) 是一一对应的,所以对 \(b\) 计数可以转为对能被这样生成的 \(a\) 计数。

如果给定了 \(a\),如何判 \(a\) 是否合法?找到第一个最小值的位置 \(p\),把 \(A[1,n]\) 变成 \(A[1,p-1]\) 和 \(A[p+1,n]\)。因为 \([1,p-1]\) 中并没有被填上最小值,所以被 \([1,p-1]\) 包含的区间一定选择的都是大于最小值的数,并且他们的的并集一定是 \([1,p-1]\)。然后递归判断 \(A[1,p-1]\) 和 \(A[p+1,n]\) 是否合法。

上述过程是值域从小到大,分裂序列。计数就考虑值域从大到小,合并序列。\(f_{l,r,x}\) 表示区间 \([l,r]\) 填入了 \([x,c]\) 中的数的方案数。转移就是枚举最小值的位置 \(p\):

\[\begin{aligned} f_{l,r,x}&\leftarrow [[l,r]\text{合法}]\times f_{l,r,x+1}\\ f_{l,r,x}&\leftarrow [[l,p-1]\text{合法}]\times f_{l,p-1,x+1}\times f_{p+1,r,x} \end{aligned} \]

第一种转移表示区间内没有 \(=x\) 的数。预处理合法区间,暴力做复杂度是 \(\mathcal O(n^3c)\)。套路性的,不难归纳证明 \(f_{l,r,x}\) 是一个关于 \(x\) 的 \(\mathcal O(r-l)\) 次多项式。

令 \(x\leftarrow c-x+1\),这样可以暴力求得 \(f_{1,n,1\sim n+1}\),然后可以拉插出 \(x=c\) 的点值,复杂度是 \(\mathcal O(m+n^4)\)。

int n,m,K,f[110][110][110];
bool v[110][110];
inline void mian()
{
	read(n,m,K);int x,y,ans=0;
	while(m--)read(x,y),v[x][y]=1;
	for(int i=n;i>=1;--i)
	{
		for(int j=i;j<=n;++j)
		{
			int x=-1,y=-1;
			for(int k=j;k>=i;--k)if(v[i][k]){x=k;break;}
			for(int k=i;k<=j;++k)if(v[k][j]){y=k;break;}
			if(x==-1||y==-1)continue;
			v[i][j]|=x>=y-1;
		}
	}
	for(int i=1;i<=n;++i)v[i][i-1]=1;
	for(int i=1;i<=n;++i)for(int j=i;j<=n;++j)f[1][i][j]=1;
	for(int i=1;i<=n+1;++i)for(int j=1;j<=n+1;++j)f[i][j][j-1]=1;
	for(int x=2;x<=n+1;++x)
	{
		for(int i=n;i>=1;--i)
		{
			for(int j=i;j<=n;++j)
			{
				if(v[i][j])f[x][i][j]=f[x-1][i][j];
				for(int k=i;k<=j;++k)if(v[i][k-1])
				Madd(f[x][i][j],Cmul(f[x-1][i][k-1],f[x][k+1][j]));
			}
		}
	}
	for(int i=1;i<=n+1;++i)
	{
		int v=1,x=1;
		for(int j=1;j<=n+1;++j)if(i!=j)Mmul(v,Cdel(i,j)),Mmul(x,Cdel(K,j));
		Madd(ans,Cmul(x,power(v,MOD-2),f[i][1][n]));
	}
	write(ans);
}

标签:int,最小值,合法,--,Range,Minimum,110,Element
From: https://www.cnblogs.com/WrongAnswer90/p/18350906

相关文章

  • element--tree树形组件
    一、有一个default-expand-all是否默认展开所有节点的属性,只在第一次初始化tree的时候有效,改变这个属性的值好像不能控制展开折叠给出示例代码:<template><div><el-tree:data="treeData"ref="tree":default-expand-all="false"></el-tree><el-button@clic......
  • 从Vue到Element
    Vue-ElementAjax原生AjaxAxios案例Vue项目启动配置端口  开发流程Element快速入门组件表格分页对话框表单案例Vue路由打包部署Ajax原生Ajax1.创建XMLHttpRequestvarxmlHttpRequest=newXMLHttpRequest();2.发送异步请求xml......
  • nuxt2 语言国际化 + element国际化
    踩坑:element国际化动态设置语言必须使用服务端中的store状态才可以importVueI18nfrom'vue-i18n'importenLocalefrom'element-ui/lib/locale/lang/en'importElementLocalefrom'element-ui/lib/locale';//导入ElementUI的语言包importcnLocalefrom'e......
  • createElement 和 cloneElement 的区别
    引言在React中,组件是构建用户界面的基本单元,它们可以通过不同的方式创建和操作。两个常用的方法是React.createElement和React.cloneElement。虽然它们都与React元素的创建和操作有关,但它们的用途和功能却完全不同。了解这两个方法的区别对于有效地构建和管理React应......
  • 基于Vue2+ElementUI/Vue3+ElementPlus对el-notification增加倒计时进度条特效,鼠标移入
    遇到一个需求就是对这个el-notification加一个倒计时进度条,方便用户知道该通知何时自动关闭。一、示例代码(1)基于Vue2+ElementUI的项目<template><div><el-button@click="showTip">doit</el-button></div></template><script>exportdefault{......
  • XLSX.utils.decode_range 使用,选定表格范围
    表格选定范围设置边框当需要设置特定范围(如A6到E19)的边框时,可以使用XLSX.utils.decode_range和XLSX.utils.encode_cell方法来处理。以下是如何使用decode_range解析范围并设置边框样式的示例:importXLSXfrom'xlsx-js-style';constworkbook=XLSX.utils.book_new(......
  • Axure导入ElementUI元件库——提升原型设计效率与质量
    在快速迭代的互联网产品开发过程中,高质量的原型设计是确保项目顺利进行的关键一步。AxureRP,作为一款强大的原型设计工具,以其丰富的交互功能和易用的界面设计,深受设计师和开发者的喜爱。而ElementUI,作为一套为开发者、设计师和产品经理准备的基于Vue2.0的桌面端组件库,以其优......
  • ElementUI元件库在Axure中使用
    一、ElementUI元件库介绍ElementUI 是一套为开发者、UI/UX设计师和产品经理准备的基于Vue2.0的桌面端组件库。它以其优雅的设计和丰富的组件,极大地提升了Web应用的开发效率与用户体验。ElementUI的组件设计精致且符合现代UI规范,包括按钮、表单、弹窗、菜单等多种类型,能够满......
  • Element el-form 表单校验,保存或提交验证某一项或者多项;validateField 的使用
    通常新增或者编辑对form表单的校验都是全局性的校验:this.$refs.form.validate(valid=>{if(valid){//校验通过,业务逻辑代码...}});如果需要对表单里的特定几个必填项进行校验,应该如何实现? 业务场景:下图点击保存按钮时,只需要校验前两项,其余参数不......
  • [AGC005B] Minimum Sum 题解
    题目传送门看到这道题很多人用单调栈,其实用笛卡尔树本质差不多,但是思维难度更小。不知道笛卡尔树的同学可以看这里简单说来,笛卡尔树的一个子树可以代表一个区间,且左子树上点的下标小于根节点,右子树上点的坐标大于根节点。这道题要求所有子区间的\(\texttt{min}\)值之和,其实......