0%

CF-1072-G. Nastiness of Segments

题目大意

有 n 个块,编号从 1 到 n,每个块上有一个初始整数 a_i。

对于一个连续段 [l, r],如果整数 d (0 ≤ d ≤ r - l) 满足 min(al,al+1,...,al+d)=dmin(a_l, a_{l+1}, ..., a_{l+d}) = d,则称 d 为 nasty 数字。

一个段的 nastiness 定义为该段中 nasty 数字的数量。

需要处理 q 个操作:

  • **操作 1:**将第 i 个块上的数字修改为 x

  • **操作 2:**查询段 [l, r] 的 nastiness

对于每个操作 2,输出对应段的 nastiness 值。

思路讲解

我们发现一件事情,令 $mn\gets min(a_l, a_{l+1}, …, a_{l+d}) d\uparrowmn\downarrow$,他们两个的这个单调关系是相反的,我们却要求的是 mn=dmn=d 的这个情况的数量,由于 dd 是严格递增的,mnmn 是非严格递减的,这两者显然最多只有一个交点。

那么现在这个问题就来到了,我们实际上就是求一个区间中是否有这个 dd 值嘛,显然,这个可以使用二分解决,只要我们有一个数据结构可以支持这个 RMQ 和这个单点修改即可,可以使用我们的树状数组。

AC代码

AC
https://codeforces.com/contest/2184/submission/358028437

心路历程(WA,TLE,MLE……)