首页 > 代码库 > [Offer收割]编程练习赛11 题目4 : 排队接水

[Offer收割]编程练习赛11 题目4 : 排队接水

时间限制:10000ms
单点时限:1000ms
内存限制:256MB

描述

有n个小朋友需要接水,其中第i个小朋友接水需要ai分钟。

由于水龙头有限,小Hi需要知道如果为第l个到第r个小朋友分配一个水龙头,如何安排他们的接水顺序才能使得他们等待加接水的时间总和最小。

小Hi总共会有m次询问,你能帮助他解决这个问题吗?

假设3个小朋友接水的时间分别是2,3,4。如果他们依次接水,第一位小朋友等待加接水的时间是2,第二位小朋友是5,第三位小朋友是9。时间总和是16。

输入

第一行一个数T(T<=10),表示数据组数

对于每一组数据:

第一行两个数n,m(1<=n,m<=20,000)

第二行n个数a1...an,表示每个小朋友接水所需时间(ai<=20,000)

接下来m行,每行两个数l和r

输出

对于每次询问,输出一行一个整数,表示答案。

样例输入
1
4 2
1 2 3 4
1 2
2 4
样例输出
4
16

思路

莫队算法。待完成。

[Offer收割]编程练习赛11 题目4 : 排队接水