연속합과 쿼리

시간 제한2초메모리 제한512 MB

요약
수열이 주어질 때 각 질의가 지정한 구간 안에서 최대 부분 배열 합을 구해 출력한다.
난이도

어려움10점 중 8점

유형
세그먼트 트리, 분할 정복, 동적 계획법, 배열
정답자
아직 제출이 없습니다

문제

길이가 N인 수열 A1, A2, ..., AN이 주어진다. 이때, 다음 쿼리를 수행하는 프로그램을 작성하시오.

  • i j : Ai, Ai+1, ..., Aj에서 가장 큰 연속합을 출력한다. (1 ≤ i ≤ j ≤ N)

수열의 인덱스는 1부터 시작한다.

연속합은 연속된 몇 개의 수를 선택해서 구할 수 있는 합 중 가장 큰 합이며, 수는 한 개 이상 선택해야 한다.

입력

첫째 줄에 수열의 크기 N이 주어진다. (1 ≤ N ≤ 100,000)

둘째 줄에는 A1, A2, ..., AN이 주어진다. (-1,000 ≤ Ai ≤ 1,000)

셋째 줄에는 쿼리의 개수 M이 주어진다. (1 ≤ M ≤ 100,000)

넷째 줄부터 M개의 줄에는 쿼리가 주어진다.

출력

쿼리의 정답을 한 줄에 하나씩 순서대로 출력한다.

예제1

  1. 예제 1

    입력
    10
    10 -4 3 1 5 6 -35 12 21 -1
    10
    1 1
    3 4
    1 6
    2 6
    6 6
    7 7
    8 9
    8 10
    1 10
    5 8
    
    예상 출력
    10
    4
    21
    15
    6
    -35
    33
    33
    33
    12