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

[集训队互测 2022] Range Minimum Element

时间:2024-09-07 23:04:05浏览次数:10  
标签:int res Element read Range Minimum define dp mod

好题

先不考虑 \(b\) 序列的计数,我们先考虑构造 \(a\) 序列。

由于是区间 min,所以考虑从小到大填数(类似笛卡尔树),所以设 \(dp_{l,r,k}\) 表示在 \([l,r]\) 的区间中填的数都 \(\le k\),那么就有了转移式 \(dp_{l,r,k} = \sum_{i} dp_{l,i-1,k-1} * dp_{i+1,r,k}\)

但是这个 dp 转移式仍然存在一定的问题,因为对于 \(b\) 序列有可能会算重,这个时候的处理也不难,让 \(i\) 每次跳到下一个 \(b\) 上面就行了。

然后我们发现 \(c\) 过大了,所以把 dp 式中最后一维 \(k\) 的表示填的数不超过第 \(k\) 大的数即可。

最后容斥一下统计答案即可。

点击查看代码
#include<bits/stdc++.h>
#define fir first
#define sec second
#define int long long
#define lowbit(x) x&(-x)
#define mkp(a,b) make_pair(a,b)
using namespace std;
typedef pair<int,int> pir;
inline int read(){
	int x=0,f=1; char c=getchar();
	while(!isdigit(c)){if(c=='-') f=-1; c=getchar();}
	while(isdigit(c)){x=x*10+(c^48); c=getchar();}
	return x*f;
}
const int inf=1e9,N=105,mod=998244353;
int n,m,c;
int dp[N][N][N],mn[N],C[N][N];
struct node{int l,r;}p[N*N];
inline int Inv(int a,int b=mod-2){
    int res=1;
    while(b){
        if(b&1) res=res*a%mod;
        a=a*a%mod,b>>=1;
    }
    return res;
}
signed main(){
    n=read(),m=read(),c=read();
    for(int i=1;i<=m;i++) p[i].l=read(),p[i].r=read();
    for(int i=1;i<=n+1;i++) for(int j=1;j<=min(n,c);j++) dp[i][i-1][j]=1;
    C[0][0]=1;
    for(int i=1;i<=N-5;i++){
        C[i][0]=1;
        for(int j=1;j<=N-5;j++) C[i][j]=(C[i-1][j-1]+C[i-1][j])%mod;
    }
    for(int len=1;len<=n;len++){
        for(int l=1;l+len-1<=n;l++){
            int r=l+len-1;
            for(int i=l;i<=r;i++) mn[i]=inf;
            for(int i=1;i<=m;i++) if(l<=p[i].l&&p[i].r<=r) for(int j=p[i].l;j<=p[i].r;j++) mn[j]=min(p[i].r,mn[j]);
            dp[l][r][1]=1;
            for(int j=2;j<=min(n,c);j++) for(int i=l;i<=r;i++){
                if(mn[i]==inf) continue;
                (dp[l][r][j]+=dp[l][i-1][j-1]*dp[i+1][r][j])%=mod;
                i=mn[i];
            }
            for(int j=1;j<=min(n,c);j++) (dp[l][r][j]+=dp[l][r][j-1])%=mod;
        }
    }
    int p=1,ans=0;
    for(int i=1;i<=min(n,c);i++){
        p=p*(c-i+1)%mod*Inv(i)%mod;
        int sum=0;
        for(int j=i,w=1;j>=1;j--,w=-w) (sum+=w*dp[1][n][j]*C[i][j])%=mod;
        (ans+=sum*p)%=mod;
    }
    cout<<(ans+mod)%mod<<'\n';
}

标签:int,res,Element,read,Range,Minimum,define,dp,mod
From: https://www.cnblogs.com/Cyan0826/p/18402290

相关文章

  • 基于sprigboot、vue.js、elementui、axios.js、xlsx.js的小型购物管理系统
    该管理系统实现了增加、编辑、删除、导出、批量删除。以下是代码实现:<!DOCTYPEhtml><html>   <head>      <metacharset="utf-8">      <title></title>      <linkrel="stylesheet"href="./css/element.css"/>......
  • python 错误提示 DeprecationWarning: find_element_by_* commands are deprecated. P
    DeprecationWarning:find_element_by_*commandsaredeprecated.Pleaseusefind_element()insteadfromselenium.webdriver.common.byimportBydriver=webdriver.Chrome("chromedriver.exe")#driver.find_element_by_name("NAME")driver.find_......
  • element修改默认主题颜色
    element有一套默认的颜色,我们可以根据需求去配置1.前置首先elementplus和自动导入插件要配置好npmielementPlusnpminstall-Dunplugin-vue-componentsunplugin-auto-import且在vite.config.js里配置好importAutoImportfrom'unplugin-auto-import/vite'importComp......
  • elementplus vue3 table表格动态合并单元格
    letcellList:any[]=[]//单元格数组letcount:number=0//计数constcomputeCell=(tableList:any[],name)=>{cellList=[]count=0for(leti=0;i<tableList.length;i++){if(i===0){//先设置第一项cellList.push(1)......
  • Element UI 的弹窗组件问题
    当在ElementUI的弹窗组件中打开另一个弹窗时,可能会出现多层遮罩的问题。这可能导致用户界面不友好,并且影响用户体验。为了解决这个问题,您可以尝试以下几种方法:设置遮罩层的append-to-body属性:在ElementUI弹窗组件中,可以尝试设置append-to-body属性为true。这样可以确保......
  • house of orange
    houseoforange1.针对没有free的堆题目orange部分申请比topchunk的size大的chunk,会将原本的chunk放入unsortedbin中,可以借此泄露地址FSOPio文件结构有chain连接成一个链表形式,这部分,头节点记录在_IO_list_all上,通过unsortedattack或者largebinattack劫持_io_list_all,指向......
  • element-plus 倒计时el-countdown添加背景色
    效果图: 实现方法:<el-countdown:time="countdownTime":formatter="formatter"/><divv-html="formattedTime"></div>formatter(time){constdays=Math.floor(time/1000/60/60/24......
  • 基于JavaWeb开发的Java+SpringBoot+vue+element实现前后端分离玩具商城系统
    基于JavaWeb开发的Java+SpringBoot+vue+element实现前后端分离玩具商城系统......
  • element-plus中的el-table组件tooltip显示错位
    问题描述:element-plus组件库中的el-table组件有一个show-overflow-tooltip属性,设置为true时如果表格中数据过长就会显示一个浮动窗口就像这样而有时这个小浮窗会有错位的问题像是这样,会导致靠上的列浮窗直接越界不显示问题原因table下的tooltip是fixed定位。positi......
  • Vite2.0+ElementPlus+Koa2+Mongo全栈开发通用后台系统Vue3
    Vite2.0+ElementPlus+Koa2+Mongo全栈开发通用后台系统Vue3前言当前基于NodeJs框架的全栈工程实践非常之火,作为一个很长时间未接触代码的前程序猿。一直有点手痒痒,想尝试一下这种全新的编程体验,于是就重新开始了填坑的不归之路。这一套框架是基于现在的前后台分离的指导原则来......