P9461

昨天比赛由于时间原因只看了一眼,这个题感觉挺有意思,随便写了个暴力,结果拿到了 0pts 的高分就没再看……赛后发现有一种情况的性质想错了……

以上都是废话

题意简述

给出序列 $\{a_1,a_2,\cdots,a_n\}(1\le n\le10^6,1\le a_i\le10^6)$,构造序列 $b=\{1,2,\cdots,a_1,1,2,\cdots,a_2,\cdots,1,2,\cdots,a_n\}$。求 $b$ 的所有子区间最小众数之和。

题目分析

最基础的暴力很好做,直接构造 $b$ 进行统计就行。

注意到 $a_i$ 并不太大(当然大了离散化后也一样),那么 $b$ 不同区间的最小众数也不会有太多情况。我们自然想到可以统计每个数作为区间最小众数的情况数之和。比赛时我也是想到了类似于出题人大佬的区间最小众数性质:要么是 $1$,要么是区间的左端点。具体的证明我没有特意去写,大家可以直接看出题人大佬的题解,里面说的很详细。

那么对于每个 $b$ 中的区间内的元素,可以拆成 $[l,a_x],[1,a_{x+1}],[1,a_{x+2}],\cdots,[1,a_{y-1}],[1,r]$。当且仅当 $\forall i\in[x,y-1],a_i\ge l$ 且 $r\ge l$ 时区间最小众数为 $l$,否则为 $1$(比赛时我误认为只要 $r\ge l$ 就行,导致了爆零)。

证明比较简单:

若 $\forall i\in[x,y-1],a_i\ge l$ 且 $r\ge l$,则 $l$ 在所有区间存在,出现了 $y-x+1$ 次;而 $1,2,\cdots,l-1$ 在第一个区间不存在,至多出现 $y-x$ 次,不可能为众数;$l+1,l+2,\cdots$ 也至多出现 $y-x+1$ 次,即使是众数也不可能是最小众数。因此最小众数必为 $l$。

否则,$\exists i\in[x,y-1],a_i<l$ 或 $r<l$,那么 $l,l+1,l+2,\cdots$ 在 $[1,a_i]$ 或 $[1,r]$ 必然不出现,至多出现 $y-x$ 次;$1$ 只在第一个区间不出现,必然出现 $y-x$ 次,$2,3,\cdots,l-1$ 则至多出现 $y-x$ 次。由此判断 $1$ 必为最小众数。

那么有了以上的结论,我们就可以很简单地统计了。对于每个 $l$,用链表快速统计出 $\ge l$ 的极大连续段进行计算即可。

posted @ 2023-07-16 13:27  Hadtsti  阅读(4)  评论(0编辑  收藏  举报  来源