#P1104. 程序员对决

程序员对决

题目描述

某编程社区举办了一场代码对决大赛。参赛者分为两派:简洁派高效派。每个参赛程序员有两个属性:代码行数 L功力值 P

若有多个最优的行数上限 TT 使得消耗总功力达到最大值,输出其中最小的 TT

大赛规则如下:

  • 设定一个行数上限 TTT 只需取所有参赛者中出现过的代码行数 LL 中的值即可,无需考虑其他值; 退赛者对应的 L 在统计时不再纳入考虑)。

  • 简洁派程序员仅当自己的代码行数 LTL ≤ T 时可以出战。

  • 高效派程序员仅当自己的代码行数 LTL ≥ T 时可以出战。 (若 L=TL = T,则该程序员同时计入两派的统计范围。)

  • 双方出战的程序员各自按代码行数排序:简洁派从少到多,高效派从多到少(行数相同时功力值大的在前)。

  • 对决开始:双方第一位出战,消耗相同功力值(消耗 min(简洁派P1,高效派P1)min(简洁派P₁, 高效派P₁)),功力少者退场,胜者继续与对方下一位对决。重复直至一方无人可战。

总消耗功力值 = 2×min(简洁派出战者功力总和,高效派出战者功力总和)2 × min(简洁派出战者功力总和, 高效派出战者功力总和),即 2×min(ΣP简洁(LT),ΣP高效(LT))2 × min(ΣP简洁(L≤T), ΣP高效(L≥T))

比赛报名阶段,程序员会动态报名和退赛。你需要对每一次报名/退赛事件后,立即计算出能使消耗总功力最大的行数上限 TT,以及该 TT 下的消耗总功力值。若对于任意 TT,都无法使双方均有程序员出战,输出 PeacePeace

输入格式

第一行一个整数 QQ,表示报名/退赛事件总数。

接下来 QQ 行,每行为以下两种格式之一:

  • 11 tt xx yy:报名事件。t=0t=0 表示简洁派,t=1t=1 表示高效派,xx 为代码行数,yy 为功力值。

  • 22 kk:退赛事件。撤销第 kk 条报名信息。保证第 kk 条报名信息存在且未被撤销过。事件编号中只统计报名事件(1 操作),不计入退赛事件(2 操作)。

输出格式

对每个事件输出一行:

  • 如果存在某个 TT 使得双方均有程序员出战(消耗总功力 > 0),输出两个整数:最优行数 TT 和最大消耗总功力。

  • 否则输出 PeacePeace

样例

5
1 0 3 5
1 1 5 3
2 1
1 0 4 2
2 3
Peace
3 6
Peace
4 4
Peace

提示

  • T 只需在当前活跃的所有 L 值中考虑,坐标压缩时需保留可能出现的所有 L 值。
  • 退赛操作 2 k 中的 k 指第 k 条报名信息(1-indexed),而非所有事件的总序号。
  • 保证 2 k 中的 k 合法且未被退赛过。

数据范围

  • 1Q2×1051 ≤ Q ≤ 2×10^5

  • 1x,y2×1091 ≤ x, y ≤ 2×10^9