Loading

CF1439C Greedy Shopping 线段树二分 / 前缀相减性

首先对于修改来说,注意到 \(a\) 是一个不下降子序列,所以每次更改一个前缀其实是将这段前缀的一个前缀全部赋值为 \(y\),然后其余的数不做更改。

然后考虑查询怎么做,注意到我们可以每次二分出能到达的最左的端点,然后继续二分下一个段的开头在哪里,不难发现段数最多只有 \(\log V\) 段,而每段我们又要二分一个右端点,二分的过程中我们又需要用线段树查询,所以我们单词复杂度其实是 \(O(\log^2 n \log V)\)

但是注意到我们这个二分可以带到线段树中去做,但是查询是一段后缀,左端点很不好处理,于是我们加上前面所有数的值再对整体做一遍,不难发现这样肯定是对的,然后最后把那些答案都给减掉就可以了。

posted @ 2024-09-27 14:46  Alexande  阅读(15)  评论(0)    收藏  举报