Effects of Anti Pimples

这篇题解

这种转化应该比较容易吧,考虑贡献就好了。。转化之后将\(a\)升序排序应该也是比较自然的

讲一下为什么这种转化是正确的:我们考虑一一映射。对原来的一个子序列,我们按照其最大值为第一关键字,下标为第二关键字进行排序,显然会唯一映射到某一序列;对排序之后的序列,我们不妨假设序列也是按照最大值为第一关键字,下标为第二关键字进行排序的,所以从新的序列中任取一个子序列,根据其下标就可以还原到原来序列的唯一的一个子序列,所以两者是一一对应的,所以转化就没有问题

说一下我的做法,我从集合的角度考虑的

我们首先仍然求出每一个位置的题目要求的最大值,记为\(d_i\)

假设我们当前倒序循环到了位置\(i\),且已经知道了\([i+1,n]\)的所有非空集合的数量(指,我们知道了当集合最大值为\(p\)的集合的数量,用线段树存储),那么我们添加\(i\)这个位置,首先之前小于等于\(d_i\)的集合(设数目为\(x\)),加入\(i\)之后最大值就变为\(d_i\)了,再算上只有\(i\)一个元素的集合,所以给线段树中\(d_i\)这个位置加上\(x+1\);然后之前大于\(d_i\)的集合(设数目为\(y\)),加入\(i\)之后最大值不变,所以我们给线段树对应区间乘以\(2\);综上,用线段树就可以实现了

posted @ 2024-03-25 16:54  最爱丁珰  阅读(1)  评论(0编辑  收藏  举报