题目描述
「Alice —— !」「Karen —— !」
Alice 和 Karen 家边的大花坛给了她们无尽的欢乐。
这天 Karen 想重新规划一下花坛在一年里的外观。但是由于花朵各有其花期,而且花市上的选择实在太多了,所以她把问题进行了一些抽象,希望擅长程序设计的你可以为她解决。
物品集合 S 初始为空,按时间递增顺序依次给出 q 次操作,操作如下:
- 1 v w e 表示在 S 中加入一个体积为 v 价值为 w 的物品,第 e 次操作结束之后移除该物品。
- 2 v 表示询问。你需要回答:
- 当前 S 是否存在一个子集使得子集中物品体积和为 v。
- 当前 S 的所有物品体积和为 v 的子集中,价值和最大是多少(空集的价值和为 0)。
输入格式
第一行三个正整数 q,maxv,T 表示操作数、最大可能的 v、及是否强制在线。
接下来 q 行每行描述一个操作。
设修正值 d=T×lastans。这里 lastans 表示上次询问的两个答案的异或和,若没有上次询问则 lastans=0。
则第 i 行中,第一个整数 op 表示操作类型;
若操作类型为 1,则接下来三个整数 v′,w′,e′ 表示加入一个体积为 vi=v′−d,价值为 wi=w′−d,在第 ei=e′−d 时间后被移除的物品;
若操作类型为 2,则接下来一个整数 v′ 表示询问 vi=v′−d。
一行中相邻整数以单个空格分隔。
输出格式
对于每个询问(2 类型的操作)输出一行两个整数 e 和 maxw,由空格分隔。
若不存在这样的子集,e=maxw=0;
否则 e=1,maxw 为最大的价值和。
数据范围与提示
对于所有数据,1≤q≤15000,1≤vi≤maxv≤15000,0≤wi≤15000,i≤ei≤q。
对于每个测试点,若问题 1 回答全对,则得 40% 的分数;若问题 2 回答全对,则另得 60% 的分数。每个子任务的得分是其中各测试点的最小值。
注意,即使你只回答了一个问题,每次仍要输出两个整数,以免答案错位。
Subtask # |
分值 |
q,v 的限制 |
T 的限制 |
1 |
15 |
q≤18,v≤15000 |
T=0 |
2 |
20 |
q,v≤1000 |
T∈{0,1} |
3 |
q,v≤6000 |
T=0 |
4 |
q,v≤10000 |
5 |
25 |
q,v≤15000 |
T∈{0,1} |