首页 > 其他分享 >qoj#5016

qoj#5016

时间:2023-06-07 23:11:34浏览次数:40  
标签:5016 值域 钦定 转移 序列 区间 考虑 qoj

考虑对于每个合法的序列 \(b\) 对应出唯一序列的 \(a\):
\(a_i\) 为所有对应区间 \([l_j, r_j]\) 包含 \(i\) 的 \(b_j\) 的最大值,若没有则为 \(1\)。这样填完之后所有 \(a_i\) 均为其最小可能值,若所有 \(b_i\) 的值都正确,则序列 \(b\) 合法。容易发现这样的映射是单射。

考虑统计合法 \(a\) 序列的数量:

首先填的时候可以考虑从小往大填,先钦定几个 \(b_i\) 对应区间大于当前值,然后剩下的没填的位置填当前值。

\(f(l, r, i)\) 表示值域为 \([1, i]\),只考虑 \(a_l,a_{l + 1},\cdots, a_r\) 的填法的数量。

每次增大值域,可以考虑把原有数全部 \(+1\),再新填数。

增大值域看似是从大往小填,但其实可以视作先处理出填大的方法数,再钦定区间填大的转移。

枚举填完后第一个为 \(1\) 的位 \(k\)(也就是第一个没有被钦定的位置),若没有则视为 \(r + 1\),则

\[f(l, r, i) \gets f(l, k - 1, i - 1)\times f(k + 1, r, i) \]

这个转移的意思是,\([l, k - 1]\) 内的所有区间都被钦定了,\(k\) 没有被钦定,而后面的区间填的方法数已经计算好了,乘起来就好了,容易发现这样转移不会重复计入某种方案。

什么时候转移合法呢?区间 \([l, k-1]\) 包含的所有区间 \([l_i, r_i]\) 的并恰好为 \([l, k-1]\) 时就可以这么转移,这个是可以预处理出来的。

时间复杂度 \(\mathcal{O}(n^3c)\),但 \(c\) 太大了,考虑优化:容易发现答案是一个关于 \(c\) 的最高 \(n\) 次的多项式,证明的话可以考虑假设某种方案下最终填好的 \(a\) 里面有 \(k\) 种不同的数,那就有 \(\binom{c}{k}\) 的贡献,这是一个关于 \(c\) 的 \(k\) 次多项式,而 \(k\le n\),于是每种方案的贡献加起来仍是一个最高 \(n\) 次的多项式,因此求出值域分别为 \([1, 1]\) 到 \([1, n + 1]\) 的答案拉插就可以做到 \(\mathcal{O}(n^4)\)。

前几天数据结构写麻了,这题代码真好写啊。

标签:5016,值域,钦定,转移,序列,区间,考虑,qoj
From: https://www.cnblogs.com/0922-Blog/p/qoj5016.html

相关文章

  • qoj#5098
    兔队线段树题。记\(\{a_i\}\)的前缀和为\(\{S_i\}\),记距离\(i\)位置最近的颜色相同位置为\(pre_i\),那当钦定某个点\(i\)为右端点时,左端点最小可以为\(\max\limits_{1\lej\lei}\{pre_j\}+1\)。考虑对于线段树上每个结点\(p\),记其对应的区间为\([l_p,r_p]\),中点......
  • HDU 5016 Mart Master II (树上点分治)
    题目地址:HDU5016先两遍DFS预处理出每个点距最近的基站的距离与基站的编号。然后找重心,求出每个点距重心的距离,然后根据dis[x]+dis[y]<d[y],用二分找出当前子树中不会被占领的数量,总点数减去即是被占领的数量。这样就可以求出每个点最多占领的点的数量。然后找最大值即可。......
  • QOJ5256 [CERC2022] H. Insertions 题解
    题面题意:给定字符串\(S,T,P\),求将\(T\)插入进\(S\)之后\(P\)最多的出现次数。输出:最多的出现次数;达到这个最多出现次数的插入位置数量;达到这个最多出现次数......
  • [qoj4820]Kitten's Computer
    为了方便,以下位运算中均省略\(\and\)将\(a_{2}\)的每一位拆开,对于第\(i\)位,将该位乘\(a_{1}\)的结果放到\(a_{A_{i}}\)上具体的,将该位单独取出放在最低位,并倍增使其余位......
  • QOJ5402. 术树数
    \(\text{Problem}\)术树数\(\text{Summary}\)这题有许多优美的结论,并加深了对线性基的理解图论中非常有用的结论(路径可重):1.包含一个点的简单环张成了包含一个点的所有......
  • [qoj4884]Battleship: New Rules
    记\(m=n+1\),注意区分"格子"和"格点"由于不能有公共格点,不妨从此角度分析——格点有\(m\timesm\)个,每次覆盖其中\(2\timesa\)的矩形(其中\(a\ge2\))覆盖格子与格点总数......
  • QOJ5013 Astral Birth(凸包,分治,堆,贪心)
    QOJ5013AstralBirth\(m=1\)直接求LIS。否则对于\(m\ge2\),就是求把序列分成\(m+1\)段,每段翻转或者不翻转,最终最多\(1\)的个数。很明显相邻两段翻不翻转的......
  • QOJ #4812. Counting Sequence
    题面传送门首先显然有一个\(O(n^2)\)的dp:设\(f_{i,j}\)表示当前总和为\(i\),结尾是\(j\)的方案数,转移是平凡的。因为相邻两项差只有\(1\),因此所有\(a_i\)和\(a......
  • FZQOJ 1280
    GameTJ(含另类思路)题意:给定$N$个按长度排序的单词。规定接龙的规则为:若$t$是$s$的真前缀,则$s$可以接龙在$t$后面。求最多接龙次数。$N......
  • [qoj4208]Flight to the Ford
    维护两个集合\(S\)和\(T\),表示当前最后一个询问正确/错误时可能的答案初始\(S=[1,10^{9}]\)且\(T=\empty\),每次划分\(\begin{cases}S=S_{1}\cupS_{2}\\T=T_{1}\cupT_{2......