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\);综上,用线段树就可以实现了

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值