zoukankan      html  css  js  c++  java
  • lg4229

    先考虑(aleq 2)
    (g)值为(1)的区间可以从原数列中删除。
    显然如果两个区间(a1)包含(a2),则(a1)是无用的,把它去掉。
    去掉无用的区间的过程显然可以使用单调栈维护。
    剩余的区间肯定没有包含关系。
    把所有区间按照左端点从小到大排序,则右端点也是递增的。
    考虑离散化,从左到右dp。发现我们如果方案合法,则任何时候被覆盖的一定是一段前缀。
    (f_{i,j})表示dp到第(i)个段,排序后([1...j])被覆盖的方案数。
    (t_{i,j})表示如果([1...j])被覆盖,接下来在(i)位置填2的方案数。
    如果填入后不连续则(t_{i,j}=-1)
    显然(t_{i,})可以使用双指针预处理。
    当前位置填(2),假如当前段长度为(len),则根据补集转化方案数为(2^{len}-1)
    当前位置填(1),则方案数为(1)
    预处理转移系数,时间复杂度(O(n^2))
    再考虑原问题。
    注意到两个相交区间([l1,r1],[l2,r2]),假设第一个的值为(a),第二个值为(b)(a<b)
    则可以把第二个区间调整到与第一个区间不相交,答案不变。
    所以考虑对于所有值相同的区间计算答案,然后删除这些区间在原数列覆盖的位置后计算值更大的区间,再把每种值的区间的答案乘起来。
    假设当前处理区间值为(v),会发现转移系数或者为(g^{len}-(g-1)^{len})或者((g-1)^{len})
    预处理转移系数,时间复杂度还是(O(n^2))

  • 相关阅读:
    windows CMD大全
    算法导论(一):渐进记号
    数据结构之树
    Python读取文件内容与存储
    Python绘图的颜色设置
    Python中多个列表与字典的合并方法
    Pandas之Dataframe叠加,排序,统计,重新设置索引
    数据挖掘——聚类算法(一)
    WPF学习————制作时钟
    Opencv Sharp 基于灰度模板的多目标匹配
  • 原文地址:https://www.cnblogs.com/ctmlpfs/p/14339062.html
Copyright © 2011-2022 走看看