网站是如何盈利的,二七区室内设计装修公司排名,互联网电商公司排名,wordpress首页广告位给定一个长度为 \(n\) 的一个排列#xff0c;如果区间 \([l,r]\) 之间的数是连续的#xff0c;那么我们称这个区间时一个连续段。 比如 \([1,3,2,5,4]\) 中的连续段有#xff1a;\([1,1],[1,3],[1,5],[2,2],[2,3],[2,5],[3,3],[4,4],[4,5],[5,5]\)。 这些连续段有一个共同的… 给定一个长度为 \(n\) 的一个排列如果区间 \([l,r]\) 之间的数是连续的那么我们称这个区间时一个连续段。 比如 \([1,3,2,5,4]\) 中的连续段有\([1,1],[1,3],[1,5],[2,2],[2,3],[2,5],[3,3],[4,4],[4,5],[5,5]\)。 这些连续段有一个共同的特点区间长度等于值域大小即 \(\max-\min1r-l1\)。 移项可得\(\max-\min-rl0\)判断是否为连续段就采用的是这种方法。 有一些题目会询问关于连续段的问题很多都是数区间个数。数区间个数的问题一般可以分治或固定端点下边就采用了固定端点的方法枚举右端点处理所有左端点的询问。 由于上面我们需要通过维护 \(\max,\min\) 维护每个左端点。前面的 \(\max,\min\) 可以用单调栈维护整体用线段树记录。 那么我们就来看一些具体问题吧 CF526F Pudding Monsters 给定长度为 \(n(n\le 3\times 10^5)\) 的排列求其中连续段数量。 枚举右端点用单调栈更新左端点每次询问 \(0\) 的个数。 CF997E Good Subsegments 给定长度为 \(n(n\le 1.2\times 10^5)\) 的排列有 \(q(q\le 1.2\times 10^5)\) 次询问每次询问一段区间 \([l,r]\) 内的连续段数量。 好像是上一题的严格加强版捏。 其他和上面一模一样我们还需要维护历史答案那就改改线段树吧 如果直接维护 \(0\) 的个数会比较麻烦但是题目中有一个重要的性质保证给定的是排列。这表示 \(\max-\min-rl\) 一定 \(\ge 0\)只有区间最小值会被减为 \(0\)。那么记下最小值和次数即可。 具体维护以下信息 当前区间最小值 \(valnowmin\)当前区间最小值个数 \(cntnowmin\)当前增加值 \(vallaz\)这个区间有多少次最小值到达了 \(0\) 但子节点里没有计入答案 \(pushed\)答案数量 \(ans\)。 每移动一次右端点记录给整棵树加一次 \(pushed\) 即可。 P4747 [CERC2017]Intrinsic Interval 咕咕咕ing P6795 [SNOI2020] 排列 咕咕咕ed