UOJ Logo Universal Online Judge

UOJ

#410. 【IOI2018】会议

附件下载 统计

N 座山横着排成一行,从左到右编号为从 0N1。山 i 的高度为 Hi0iN1 )。每座山的顶上恰好住着一个人。

你打算举行 Q 个会议,编号为从 0Q1。会议 j0jQ1 )的参加者为住在从山 Lj 到山 Rj(包括 LjRj )上的人( 0LjRjN1 )。对于该会议,你必须选择某个山 x 做为会议举办地( LjxRj )。举办该会议的成本与你的选择有关,其计算方式如下:

  • 来自每座山 yLjyRj )的参会者的成本,等于在山 xy 之间(包含 xy )的所有山的最大高度。特别地,来自山 x 的参会者的成本是 Hx,也就是山 x 的高度。
  • 会议的成本等于其所有参会者的成本之和。

你想要用最低的成本来举办每个会议。

注意,所有的参会者将在每次会议后回到他们自己的山;所以一个会议的成本不会受到先前会议的影响。

实现细节

你需要实现下面的函数:

int64[] minimum_costs(int[] H, int[] L, int[] R)
  • H:长度为 N 的数组,表示这些山的高度。
  • LR:两个长度为 Q 的数组,表示这些会议的参会者的范围。
  • 该函数应返回一个长度为 Q 的数组 CCj0jQ1 )必须是举办会议 j 的最低的可能成本。
  • 注意,NQ 的值是数组的长度,可以按照注意事项中的相关内容来取得。

例子

N=4H=[2,4,3,5]Q=2L=[0,1]R=[2,3]

评测程序调用minimum_costs([2, 4, 3, 5], [0, 1], [2, 3])

会议示例图

会议 j=0Lj=0Rj=2,所以将由住在山 012 上的人参加。如果山 0 被选做举办地,会议的成本计算如下:

  • 住在山 0 上的参会者的成本是 max{H0}=2
  • 住在山 1 上的参会者的成本是 max{H0,H1}=4
  • 住在山 2 上的参会者的成本是 max{H0,H1,H2}=4
  • 因此,会议 0 的成本是 2+4+4=10

不可能以更低的成本来举办会议 0 了,因此会议 0 的最低成本是 10

会议 j=1Lj=1Rj=3,因此将由住在山 123 上的人参加。如果山 2 被选做举办地,会议的成本计算如下:

  • 住在山 1 上的参会者的成本是 max{H1,H2}=4
  • 住在山 2 上的参会者的成本是 max{H2}=3
  • 住在山 3 上的参会者的成本是 max{H2,H3}=5
  • 因此,会议 1 的成本是 4+3+5=12

不可能以更低的成本来举办会议 1 了,所以会议 1 的最低成本是 12

在样例数据下载中的文件ex_meetings1.inex_meetings1.out对应于本例。在样例包中还可找到其他样例输入/输出。

限制条件

  • 1N750 000
  • 1Q750 000
  • 1Hi1 000 000 000(0iN1)
  • 0LjRjN1(0jQ1)
  • (Lj,Rj)(Lk,Rk)(0j<kQ1)

子任务

  1. (4 分) N3 000,Q10
  2. (15 分) N5 000,Q5 000
  3. (17 分) N100 000,Q100 000,Hi2(0iN1)
  4. (24 分) N100 000,Q100 000,Hi20(0iN1)
  5. (40 分) 没有附加限制

评测程序示例

评测程序示例读取如下格式的输入数据:

  • 1 行:N Q
  • 2 行:H0 H1  HN1
  • 3+j 行( 0jQ1 ):Lj Rj

评测程序示例将以如下格式输出minimum_costs的返回值:

  • 1+j 行( 0jQ1 ):Cj

约定及限制

对于所支持的各种编程语言,下面列出了对应的数据类型。对于数据类型的细节等,参见实现示例。

语言 int int64 int[] 数组a的长度 string
C++intlong longstd::vector<int>a.size()std::string

时间限制:5s

空间限制:805MB

下载

样例数据下载