Description
题目链接:Codeforces 788E
在第 228 届国际 Uzhlyandian 战略比赛中,各队均由 $5$ 名队员组成。
Masha 是新的国防部长,这位部长的主要职责是计算军队的效率。军队由 $n$ 名士兵组成,标号为 $1$ 到 $n$,第 $i$ 个士兵的技能值为 $a_i$。
这个队伍将由 $3$ 名队员和 $2$ 名助手组成,队员的技能值是相同的,助手的技能值不大于队员的技能值。对于 Masha 而言,助手应该分别站在队员的最左侧和最右侧。形式化地说,一个队伍有 $5$ 名士兵,下标为 $i,j,k,l,p$ 满足 $1\le i<j<k<l<p\le n$ 并且 $a_i\le a_j=a_k=a_l\ge a_p$。
军队的效率是 Masha 可以选择的不同队伍的数量。两个队伍是不同的当且仅当有至少一个人不同。
最初,所有的士兵都可以成为队员。由于某些原因,有时一些士兵不能成为队员或可以成为队员;但是所有士兵在任何时候都可以成为助手。Masha 有 $m$ 次操作,每次可以令第 $x$ 个士兵可以成为队员或不能。她需要你求出每次操作后可以选择的队伍数量,答案对 $10^9+7$ 取模。
数据范围:$1\le n,m\le 10^5$,$1\le a_i\le 10^9$
Solution
由于每个士兵都可以成为助手,我们设 $pre_i$ 和 $suf_i$ 分别表示 $i$ 左边和右边比 $a_i$ 小的数的个数。可以离散化后用树状数组求出。
由于有动态修改,并且区间看起来是可以合并的,我们考虑用线段树维护。
由于第 $1,5$ 个人无关紧要的,我们只关心中间的 $3$ 个人。又因为每个权值都是独立的,因此对每种权值建立一棵线段树(当然要采用动态开点)。
每个节点维护 $6$ 个值(其中 $p$ 为根节点,$[l,r]$ 为根节点维护的区间,$ls,rs$ 为左右儿子):
变量 | 含义 | 单点初值 | 转移 |
---|---|---|---|
$A$ | 选择第 $1$ 个人的方案数 | $pre_l$ | $A_p=A_{ls}+A_{rs}$ |
$B$ | 选择第 $2$ 个人的方案数 | $1$ | $B_p=B_{ls}+B_{rs}$ |
$C$ | 选择第 $3$ 个人的方案数 | $suf_r$ | $C_p=C_{ls}+C_{rs}$ |
$AB$ | 选择第 $1,2$ 个人的方案数 | $0$ | $AB_p=AB_{ls}+AB_{rs}+A_{ls}\cdot B_{rs}$ |
$BC$ | 选择第 $2,3$ 个人的方案数 | $0$ | $BC_p=BC_{ls}+BC_{rs}+B_{ls}\cdot C_{rs}$ |
$ABC$ | 选择第 $1,2,3$ 个人的方案数 | $0$ | $ABC_p=ABC_{ls}+ABC_{rs}+AB_{ls}\cdot C_{rs}+A_{ls}\cdot BC_{rs}$ |
具体实现见代码。
时间复杂度:$O((n+m)\log n)$(注意空间复杂度和主席树类似)
Code
1 |
|