수열과 쿼리 10

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

요약
각 질의에서 구간 [x1,y1]의 시작점 i와 구간 [x2,y2]의 끝점 j를 골라 A_i부터 A_j까지의 합이 최대가 되는 값을 구한다.
난이도

어려움10점 중 8점

유형
세그먼트 트리, 누적 합, 분할 정복
정답자
아직 제출이 없습니다

문제

길이가 NN인 수열 A1,A2,…,ANA_1, A_2, \dots, A_N이 주어진다. 다음 쿼리를 처리하는 프로그램을 작성하시오.

  • x1 y1 x2 y2: x1≤i≤y1x_1 \le i \le y_1, x2≤j≤y2x_2 \le j \le y_2, i≤ji \le j를 만족하는 모든 쌍 (i,j)(i, j) 가운데 Ai+Ai+1+⋯+AjA_i + A_{i+1} + \dots + A_j의 최댓값을 출력한다.

입력으로 주어지는 쿼리는 모두 1≤x1≤x2≤N1 \le x_1 \le x_2 \le N, 1≤y1≤y2≤N1 \le y_1 \le y_2 \le N, x1≤y1x_1 \le y_1, x2≤y2x_2 \le y_2를 만족한다. 그래서 조건을 만족하는 쌍 (i,j)(i, j)는 항상 하나 이상 있다.

입력

첫째 줄에 수열의 길이 NN (1≤N≤100,0001 \le N \le 100{,}000)이 주어진다.

둘째 줄에 A1,A2,…,ANA_1, A_2, \dots, A_N이 공백으로 구분되어 주어진다. (−100,000≤Ai≤100,000-100{,}000 \le A_i \le 100{,}000)

셋째 줄에 쿼리의 개수 MM (1≤M≤100,0001 \le M \le 100{,}000)이 주어진다.

넷째 줄부터 MM개의 줄에 쿼리가 한 줄에 하나씩 x1x_1, y1y_1, x2x_2, y2y_2 순서로 주어진다.

출력

각 쿼리의 답을 한 줄에 하나씩 출력한다.

예제4

  1. 예제 1

    입력
    6
    3 -2 1 -4 5 2
    2
    1 1 2 3
    1 3 2 5
    
    예상 출력
    2
    3
    
  2. 예제 2

    입력
    1
    1
    1
    1 1 1 1
    
    예상 출력
    1
    
  3. 예제 3

    입력
    5
    -5 -1 -3 -2 -4
    5
    1 1 1 1
    1 5 1 5
    1 2 3 4
    2 3 2 5
    1 3 4 5
    
    예상 출력
    -5
    -1
    -4
    -1
    -5
    
  4. 예제 4

    입력
    9
    4 -1 3 -100 -100 -100 2 -1 5
    5
    1 3 7 9
    1 1 9 9
    1 2 8 9
    3 3 4 4
    1 4 5 9
    
    예상 출력
    -288
    -288
    -288
    -97
    -194