前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >CF1748E Yet Another Array Counting Problem

CF1748E Yet Another Array Counting Problem

作者头像
yzxoi
发布2024-02-02 20:45:33
1200
发布2024-02-02 20:45:33
举报
文章被收录于专栏:OIOI

CF1748E Yet Another Array Counting Problem

yzxoi

2022-11-14 (Updated: 2022-11-14)

oi ST, dp, 二分

对于长度为 n 的序列 x,定义其在子段 [l;r] 的“最左端最大值位置”为最小的满足 l\leq i\leq rx_i=\max_{j=l}^rx_j 的整数 i。给定整数 n,m 和长度为 n 的序列 a,你需要求出满足下列要求的序列 b 的数量:

  • 序列 b 长度为 n,且对任意整数 i(1\leq i\leq n) 都有 1\leq b_i\leq m 成立。
  • 对任意整数 l,r(1\leq l\leq r\leq n),总有 a,b 在子段 [l;r] 的“最左端最大值位置”相同。

答案对 10^9+7 取模。

n\leq 2\times 10^5n\times m \leq 10^6.

Tutorial

设区间 [l,r] 的最左端最大值位置为 f_{l,r}

,有:

p_1< m < p_2
b_m > b_{p_1}
b_m \leq b_{p_2}

至此,限制 2 即转换为以上限制。

将一个区间视为一个节点,每个节点则按照如上构造可连出两个子节点,构造一棵二叉树。

dp_{u,x} 表示节点 u 对应区间的 m=x 时的方案数。

容易有转移:

dp_{u,x} = (\sum_{i=1}^{x-1} dp_{p_1,i})\cdot (\sum_{i=1}^x dp_{p_2,i})

对于求最左端最大值位置,ST 表+二分即可。

时间复杂度:O(n\log n)

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2022-11-14 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • CF1748E Yet Another Array Counting Problem
    • Tutorial
    领券
    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档