만드는 중입니다

아직 만드는 중이라 바뀔 수 있습니다

밥의 평균

시간 제한3초메모리 제한1024 MB

요약
홀수 길이 부분배열마다 연속한 세 원소를 중앙값으로 합치는 연산을 반복해 남길 수 있는 최댓값을 구합니다.
난이도

어려움10점 중 8점

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

문제

밥은 원소 개수가 홀수인 배열의 평균을 구하는 새로운 방법을 생각해 냈다. 배열의 길이가 1보다 큰 동안 다음 연산을 반복한다. 왼쪽 끝을 ll, 오른쪽 끝을 r=l+2r = l + 2로 하는 길이 3의 구간을 임의로 고르고, 세 원소의 중앙값을 구한 뒤 세 원소를 중앙값 하나로 바꾼다. 세 원소의 중앙값은 그중 두 번째로 큰 원소이다. 예를 들어 [1,5,4][1, 5, 4]의 중앙값은 44이고, [2,2,2][2, 2, 2]의 중앙값은 22이다.

배열 [4,1,3,2,5][4, 1, 3, 2, 5]에서 l=2l = 2, r=4r = 4를 고르면 [1,3,2][1, 3, 2]의 중앙값은 22이므로 배열은 [4,2,5][4, 2, 5]가 된다. 이어서 l=1l = 1, r=3r = 3을 고르면 [4,2,5][4, 2, 5]의 중앙값은 44이므로 배열은 [4][4]가 된다.

결과는 구간을 어떻게 고르느냐에 따라 달라진다. 밥은 마지막에 남는 수가 가능한 한 가장 커지도록 구간을 고른다. 이렇게 얻은 수를 밥의 평균이라고 부른다.

원소가 nn개인 배열 aa에 대해 qq개의 질의에 답해야 한다. jj번째 질의는 LjL_j, RjR_j로 주어지며, 부분 배열 [aLj,aLj+1,…,aRj][a_{L_j}, a_{L_j+1}, \ldots, a_{R_j}]의 밥의 평균을 구한다. 모든 질의의 구간 길이는 홀수이다.

입력

첫째 줄에 배열의 크기 nn (3≤n≤5⋅1043 \leq n \leq 5 \cdot 10^4)이 주어진다.

둘째 줄에 배열의 원소 aia_i (0≤ai≤1090 \leq a_i \leq 10^9) nn개가 주어진다.

셋째 줄에 질의의 개수 qq (1≤q≤1051 \leq q \leq 10^5)가 주어진다.

이어지는 qq개의 줄에 두 정수 LjL_j, RjR_j (1≤Lj≤Rj≤n1 \leq L_j \leq R_j \leq n)가 주어진다. Rj−Lj+1R_j - L_j + 1은 홀수이다.

출력

jj번째 줄에 jj번째 질의의 답을 정수 하나로 출력한다.

예제1

  1. 예제 1

    입력
    7
    4 1 3 2 5 1 7
    5
    2 6
    1 1
    1 5
    3 7
    1 7
    
    예상 출력
    2
    4
    4
    3
    4