CFCF2182F2.Christmas Reindeer (hard version)
提高+/省选-
通过率:0%
AC君温馨提醒
该题目为【codeforces】题库的题目,您提交的代码将被提交至codeforces进行远程评测,并由ACGO抓取测评结果后进行展示。由于远程测评的测评机由其他平台提供,我们无法保证该服务的稳定性,若提交后无反应,请等待一段时间后再进行重试。
题目描述
这是本题的高难度版本。两个版本的唯一区别是 n 和 m 的上限。在本版本中,n≤3⋅105 且 m≤3⋅105。
你有一群 n 头圣诞驯鹿。第 i 头驯鹿的力量为 2ci。
一组 k 头圣诞驯鹿的最大负载能力按照如下方式计算:
- 首先将这些驯鹿的力量按不递增顺序排序。用 c1′,c2′,…,ck′ 表示排序后的力量,其中 ci′≥ci+1′;
- 然后,这组驯鹿的最大负载能力等于 c1′+⌊2c2′⌋+⌊4c3′⌋+⋯+⌊2k−1ck′⌋。
注意,有些驯鹿对组的最大负载能力的贡献可能为零。
你需要处理三种类型的操作:
- 向队伍中增加一头力量为 2x 的驯鹿;
- 从队伍中移除一头力量为 2x 的驯鹿;
- 计算从队伍中任选若干头驯鹿(可能全部选上),使得所选组的最大负载能力不少于 x 的选法数。
如果队伍中有多头驯鹿拥有相同的力量,它们被视为不同的个体。例如,若你有两头力量为 1 的驯鹿,需要计算最大负载能力不少于 1 的选法数,则有 3 种选法:选第一头,选第二头,或者两头都选。
输入格式
第一行包含两个整数 n 和 m,表示初始驯鹿数量和操作数,1≤n,m≤3⋅105。
第二行包含 n 个整数 c1,c2,…,cn,0≤ci≤60,表示第 i 头驯鹿的力量为 2ci。
接下来 m 行,每行描述一个操作之一,格式如下:
- 1 x(0≤x≤60):向队伍中增加一头力量为 2x 的驯鹿;
- 2 x(0≤x≤60):从队伍中移除一头力量为 2x 的驯鹿;
- 3 x(1≤x≤1018):计算从队伍中任选若干头驯鹿(组,可以全部选上),使得所选组的最大负载能力不少于 x 的选法数。
额外的输入约束:每当出现类型 2 的操作时,当前队伍里至少包含一头力量为 2x 的驯鹿。
输出格式
每当遇到类型 3 的操作时,输出一个整数,表示满足条件的组数(组可全部选上)。由于答案可能很大,输出其对 998244353 取模后的结果。
输入输出样例
输入#1
3 7 2 1 1 3 5 3 6 1 2 3 6 3 5 2 1 3 5
输出#1
3 0 4 10 4
说明/提示
以第一个样例说明。初始有三头驯鹿,力量分别为 4、2 和 2。
- 第一次操作,需要计算最大负载能力不少于 5 的组数,共有三种组:{1,2}(第 1 和 2 头),{1,2,3} 以及 {1,3};
- 第二次操作,需要计算最大负载能力不少于 6 的组数。即使全部选上,最大负载能力 4+⌊22⌋+⌊42⌋=5,没有合法组;
- 第三次操作,增加一头力量为 4 的驯鹿,记为第 4 头;
- 第四次操作,能够满足条件的组为:{1,4},{1,2,4},{1,3,4},{1,2,3,4};
- 第五次操作,此时有 10 种方案;
- 第六次操作,移除了一头力量为 2 的驯鹿。假设是第 2 头,现在还剩 1,3,4 三头;
- 第七次操作,需要计算最大负载能力不少于 5 的组,有四种:{1,3}、{1,4}、{1,3,4}、{3,4}。