#P9055. [集训队互测 2021] 数列重排

    ID: 9957 远端评测题 600ms 256MiB 尝试: 0 已通过: 0 显示难度省选/NOI− 上传者: 标签>集训队互测2021O2优化

[集训队互测 2021] 数列重排

背景

dottle bot。

题目描述

定义一个数列区间的 mex\textrm{mex} 为区间中最小的没有出现过的自然数,定义一个数列的价值为其中 mex≥k\textrm{mex}\geq k 的区间数量。

给定 nn 个小于 mm 的自然数和一个区间 [l,r][l,r],令 f(k)f(k) 表示 nn 个数构成的数列所有重排列中数列价值的最大值,对于每一个 k∈[l,r]k\in [l,r],求出 f(k)f(k)。

令 aia_i 表示数字 ii 出现的次数,保证存在正整数 XX,使得 ∀i≤m−1,ai∈{X,X+1}\forall i\le m-1,a_i\in \{X,X+1\}。

输入格式

由于 nn 可能很大,将采取如下方式减少读入量:

第一行四个整数 m,l,r,Xm,l,r,X。

第二行一个长度为 mm 的 0101 串,若其中第 ii 个位置为 11 则数字 i−1i-1 的出现次数为 X+1X+1,否则出现次数为 XX。

根据输入可以推出 n=mX+Sn=mX+S,其中 SS 为 0101 串中 11 的数量。

输出格式

为了减少输出量,令 $ans=\displaystyle{\bigoplus_{i=l}^r} (233^if(i)\bmod 998244353)$,其中 ⨁\displaystyle\bigoplus 表示二进制下的按位异或,输出一行一个整数 ansans。

2 0 1 2
10
3034
14 1 14 13
10110101110101
379883349

提示

样例 1 解释

在样例给出的数列中,有 33 个 00 和 22 个 11,任意排列 f(0)f(0) 均为 1515,排列为 01010\textrm{01010} 时 f(1)f(1) 有最大值 1313,答案为:

$$\displaystyle (233^0\times 15\bmod 998244353)\oplus(233^1\times 13\bmod 998244353)=3034$$

数据范围

  • Subtask 1(5 points):n,m≤9n,m\leq 9。
  • Subtask 2(15 points):n,m≤200n,m\leq 200。
  • Subtask 3(15 points):n,m≤5×103n,m\leq 5\times 10^3。
  • Subtask 4(5 points):m≤2m\leq 2,l=0l=0,r=1r=1。
  • Subtask 5(10 points):m≤106m\leq 10^6,l=ml=m,r=mr=m。
  • Subtask 6(10 points):m≤106m\leq 10^6,X=1X=1,si=0s_i=0。
  • Subtask 7(15 points):m≤106m\leq 10^6,r−l+1≤104r-l+1\leq 10^4。
  • Subtask 8(15 points):m≤2×106m\leq 2\times 10^6。
  • Subtask 9(10 points):无特殊限制。

对于所有数据,满足 n≤109n\leq 10^9,m≤107m\leq 10^7,0≤l≤r≤m0\leq l\leq r\leq m,X≥1X\geq 1。