#6985. 预算查询(budget)

预算查询(budget)

预算查询(budget)

题目描述

某公司准备从一批项目中选择若干个进行投资。

公司记录了连续 (m) 天的基础投入成本,第 (i) 天的成本为 (ai)(a_i)。

共有 (n) 个候选项目。

第 (i) 个项目由三个整数 (Li,Ri,vi)(L_i,R_i,v_i) 描述。

项目的投入成本为对应日期区间内每天成本之和,完成后可以获得 (vi)(v_i) 的收益。

每个项目最多只能选择一次。

不同项目相互独立,即使对应日期存在重叠,也可以同时选择,但费用分别计算。

现在公司需要回答 (Q) 次独立的预算查询。

每次查询给出一个预算 (B),要求计算在总投入成本不超过 (B) 的情况下,可以获得的最大总收益。

每次查询均从全部候选项目中重新选择,不受其他查询结果影响。

输入格式

第一行包含四个整数:

m n V Q

其中 (V) 表示所有查询可能出现的最大预算。

第二行包含 (m) 个正整数 (ai)(a_i)。

接下来 (n) 行,每行三个整数 (Li,Ri,vi)(L_i,R_i,v_i)。

最后 (Q) 行,每行包含一个整数 (B),表示一次预算查询。

输出格式

输出 (Q) 行,每行一个整数,表示对应预算下的最大收益。

输入输出样例 #1

输入

6 4 11 5
2 1 2 3 1 2
1 2 5
3 4 9
5 6 6
2 5 11
2
3
6
8
11

输出

0
6
11
15
20

样例解释

四个项目的实际成本分别为 3、5、3、7。

例如:

  • 预算为 2 时,没有项目可以选择,最大收益为 0。
  • 预算为 6 时,可以选择第 1、3 个项目,获得收益 11。
  • 预算为 11 时,可以选择第 1、2、3 个项目,总成本为 11,总收益为 20。

数据范围

  • (1≤m≤105)(1\le m\le10^5)
  • (1≤n≤100)(1\le n\le100)
  • (1≤V≤2000)(1\le V\le2000) -(1≤Q≤105)(1\le Q\le10^5)
  • (1≤ai≤1000)(1\le a_i\le1000)
  • (1≤Li≤Ri≤m)(1\le L_i\le R_i\le m)
  • (1≤vi≤10000)(1\le v_i\le10000)
  • (0≤B≤V)(0\le B\le V)

测试点编号 层级 m n V Q 询问与特殊性质 对应输出
1 弱数据 1 5 1 单项目、询问最大预算 10
2 边界数据 3 3 3 前缀和超过 int,项目全部超预算;询问 0、1、5 0, 0, 0
3 基础数据 2 6 5 询问费用临界值前后 0, 0, 10, 10, 18
4 正常数据 5 4 10 4 包含 L=1、单日、跨日和超预算区间 4, 8, 12, 14
5 2 20 四个项目区间相同,预算逐步增加 40, 70, 90, 100
6 边界数据 4 5 5 两个零费用项目,包含 B=0 12, 12, 22, 22, 32
7 正常数据 3 10 询问乱序且 B=10 重复出现 23, 12, 23, 12, 23
8 较强数据 10 4 不同预算下最优组合发生变化 25, 26, 30, 51, 55
9 极限价值 4 2000 单项收益 2×10⁹,询问临界预算 0, 0, 2000000000, 4000000000, 8000000000
10 极限规模 100000 100 100 100 个费用 20、收益 10⁹ 的项目 B=20i 时为 i×10⁹;B=2000 时为 100000000000