多校NOIP16

T1:

  比较显然的线段树,区间覆盖即可,时间复杂度O(nlogn),常数较大,无法通过

  考虑优化点,每个点在覆盖后无恢复操作,可以考虑对于每个点进行遍历,复杂度O(n)

  具体实现Dfs子树,标记即可

T2:

  只会大常数做法,比较显然的换根DP,问题在于转移,需要求解的是一段区间内

数x的排名,可以想到主席树进行维护,具体做法,Dfs序上建立主席树即可(权值)

T3:

  正常转移,考虑定义f[i]表示1~i方案数,转移为在1~i-1构成的所有字符串上增加一个字符

然而存在重复计算,考虑重复点在于对于相同字符,再添上一个相同字符,产生了相同序列

因此删除上一次该字符出现时的方案数即可(类似数列相减)

  即:f[i] = f[i - 1] * 2 + last[i] ? -f[last[i] - 1] : 1  其中last[i]表示i位置的字符上一次出现的位置

考虑优化,问题在于带修,分析数据范围大约是log,可以想到矩阵,也就需要线段树进行维护

  然而上述dp并不容易拓展到矩阵乘法,考虑问题在于last数组不连续导致矩阵无法进行传递

那么考虑转换dp定义使得转移能够连续进行,考虑前缀和优化,尽管我们并不需要求出每个位置

每种字符的方案数,但是由于需要连续转移,因此需要前缀和进行递推,于是有dp:

  f[i][a] = f[i][a] + f[i][b] + f[i][c] + 1,其余类似,于是线段树维护一段区间转移矩阵的乘积即可

T4:

  考虑时间显然为差分后的正值,手模考虑差分的意义即可,即为填平一段高度所需操作数

对于最大值最小值考虑构造,最大值每次填的长度尽量长即可,反之亦然,因此通过队列

维护这一过程,最后无法填完的用n + 1填完即可

posted @ 2021-10-26 21:43  HZOI_LYM  阅读(41)  评论(0)    收藏  举报