#P4497. [WC2011] 拼点游戏

[WC2011] 拼点游戏

题目描述

小 W 和小 Y 都很喜欢玩一种“拼点游戏”。游戏中两个人分别通过某种操作产生一个数作为自己的“点数”,点数大的一方获胜。“拼点游戏”的规则如下:

  1. 游戏开始时,给定一个包含 nn 个元素的正整数序列 U=(u1,u2,,un)U=(u_1,u_2,\cdots,u_n)
  2. 定义 UU 的一个下标序列 I=(i1,i2,,im)I=(i_1,i_2,\cdots,i_m) 是满足 1i1<i2<<imn1\leq i_1<i_2<\cdots<i_m\leq n 的一个整数序列( mm 可以为 0 ,即序列可以为空),并且其对应 UU 的子序列为 V=(ui1,ui2,,uim)V=(u_{i_1},u_{i_2},\cdots,u_{i_m})
  3. 定义下标序列 I=(i1,i2,,im)I=(i_1,i_2,\cdots,i_m) 对应的点数 D(I)D(I) 为: D(I)=p=1muip×(1)pD(I)=\sum_{p=1}^m u_{i_p}\times (-1)^p
  4. 进行游戏时两人分别选择一个下标序列,谁选择的下标序列对应的点数 D(I)D(I) 大,谁就获胜。

然而在每次游戏中,小 W 总是能准确无误的算出点数最大的最优下标序列。为了让游戏更加具有竞技性,他们制定了下列额外规则:

Ex1. 小W可以选择一个非空区间 [l,r][l,r],并将 ul,ul+1,,uru_l,u_{l+1},\cdots,u_r 同时增加一个整数 cc,产生的新序列将取代原序列 UU

Ex2. 当他们对于当前的 UU 序列进行一次“拼点游戏”时,允许小 Y 在小 W 选出最优下标序列 I=(i1,i2,,im)I=(i_1,i_2,\cdots,i_m) 之后,对 IWI_W 进行任意次修改操作。每次修改操作规则如下:

(1)任意选择一个正整数k满足݉ 2k+1m2k+1\leq m,以及两个非负整数 z1,z2z_1,z_2 满足 i2k+z1<i2k+1z2i_{2k}+z_1<i_{2k+1}-z_2

(2)将 i2ki_{2k} 修改为 i2k+z1i_{2k}+z_1,将 i2k+1i_{2k+1} 修改为 i2k+1z2i_{2k+1}-z_2

若小 W 选出的下标序列 IWI_W 经过小 Y 若干次修改操作之后所对应的点数小于等于 00,则小 Y 获胜。

现在给出小 W 所进行的 Ex1 操作的信息,请你对于每一次“拼点游戏” ,帮助他们计算:

a)小 W 一开始所能选出的最优下标序列对应的点数是多少?

b)小 Y 最少需要进行几次修改操作才能获胜?即使得 D(IW)0D(I_W)\leq 0

输入格式

输入文件 joy.in 的第一行包含一个正整数 TT,表示测试数据的组数。接下来为 TT 组数据。

每一组数据的第一行包含两个整数 nnqq,分别表示 UU 中的元素个数和事件个数。

接下来的一行,包含 nn个 用一个空格隔开的正整数,第 ii 个整数为初始的序列中第 ii 个元素 uiu_i

接下来 qq 行,每行代表一个事件(按事件发生顺序输入)。每行的第一个数非 0011,表示这个事件的类型。

若为 00 :在 00 之后还有三个整数 llrrcc(这四个数之间均有一个空格)表示小 W 将 ul,ul+1,,uru_l,u_{l+1},\cdots,u_r 增加 cc

若为 11:表示两人进行了一次“拼点游戏”,你需要输出相应的结果。

输入数据保证序列 UU 中的所有元素总是正整数。

输出格式

输出文件为joy.out。对于每一组测试数据,依次对每一次“拼点游戏”输出一行包含两个由一个空格隔开的整数 DmaxD_{max}XX,其中

DmaxD_{max} 为对于当前序列 UU,小 W 所能选出的最优下标序列所对应的点数;

XX 表示小 Y 最少需要进行几次修改操作才能获胜。如果小 Y 不论多少次操作都无法获胜,则输出-1

数据保证最优下标序列总是唯一的。

2 
5 9 
9 10 7 6 8 
1 
0 4 5 2 
0 3 5 4 
1 
0 2 5 -2 
0 3 5 -3 
0 4 5 -2 
0 5 5 -4 
1 
4 3 
2 4 3 5 
1 
0 3 3 3 
1 
3 1 
5 -1 
0 0 
4 -1 
4 -1 

提示

【评分标准】

一个测试点包含多组测试数据,对于该测试点:

如果所有的 DmaxD_{max} 均正确但某个 XX 不正确,则可以得到3分;

如果所有的 XX 均正确但某个 DmaxD_{max} 不正确,则可以得到7分;

如果所有回答均正确,则可以得到 10 分。

【样例说明】

输入数据包含两组测试数据。

在第一组测试数据中:第一次“拼点游戏”时,最优下标序列为 (1,2,4,5)(1,2,4,5),小 Y 只需要进行一次修改操作:选择 k=1k=1,以及非负整数 z1=1,z2=0z_1=1,z_2=0。这样经过修改操作之后下标序列将变为 (1,3,4,5)(1,3,4,5),小 Y 获胜。

第三次“拼点游戏”时,序列 UU(9,8,6,5,3)(9,8,6,5,3),小 W 所选择的最优下标序列为空序列,所产生的点数为 00。在这种情况下,小 Y 无法进行任何修改操作(也无需进行任何修改操作),此时小 Y 已经直接获胜。

【数据规模】

对于 10% 的数据满足 n,q13n,q\leq 13

对于 30% 的数据满足 n,q1000n,q\leq 1000

对于另外 20% 的数据满足 T=1T=1n40000n\leq 40000

对于 100% 的数据满足 T3T\leq 3n,q105n,q\leq 10^5,同时初始序列 UU 满足 0<ui<2310 <u_i< 2^{31}c<105|c|<10^5