부분배열 합의 합 (큰 입력)
시간 제한5초메모리 제한512 MB
양의 정수 배열의 모든 구간 합을 정렬한 뒤 각 질의에서 L번째부터 R번째 값의 합을 구합니다.
문제
앨리스는 친구 밥에게 양의 정수 개로 이루어진 배열을 주었다. 배열의 인덱스는 번부터 번까지다. 앨리스는 "이 두 인덱스 사이에 있는 수의 합은 얼마인가?" 형태의 질의를 잔뜩 던졌지만, 밥은 너무 쉽게 답했다.
그래서 앨리스는 이 배열에서 비어 있지 않은 부분배열 개를 모두 찾았다. 각 부분배열의 합을 구한 다음 그 값을 작은 것부터 차례로 정렬해, 인덱스가 번부터 번까지인 새 배열을 만들었다. 처음 배열이 라면 부분배열은 , , , , , 이다. 는 부분배열이 아니다. 각 합은 , , , , , 이고, 정렬하면 새 배열 이 나온다.
앨리스는 처음 배열과 함께 "새 배열에서 인덱스 번부터 번까지, 양 끝을 포함한 수의 합은 얼마인가?" 형태의 질의 개를 밥에게 주었다. 이번에는 밥이 막혔다. 밥을 도와주자.
입력
첫 줄에 테스트 케이스의 개수 가 주어진다. 이어서 테스트 케이스가 개 주어진다.
각 테스트 케이스의 첫 줄에는 처음 배열의 원소 개수 과 질의의 개수 가 공백을 사이에 두고 주어진다. 다음 줄에는 처음 배열의 원소 개가 공백을 사이에 두고 주어진다. 그다음 개의 줄에는 각각 번째 질의의 두 인덱스 와 가 공백을 사이에 두고 주어지며, 양 끝 인덱스는 범위에 포함된다.
제한
- 처음 배열의 각 원소는 이상 이하이다.
출력
각 테스트 케이스마다 Case #x:를 한 줄에 출력한다. 여기서 는 테스트 케이스 번호이고 부터 시작한다. 그다음 개의 줄에 질의의 답을 질문받은 순서대로 한 줄에 하나씩 출력한다.
힌트
배열 로 만들어지는 새 배열은 이다.