만드는 중입니다

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

전투 시뮬레이션

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

요약
부호가 있는 전투력의 연속 구간을 두 팀으로 나누고, 각 팀이 전체 인원의 3분의 2를 넘지 않게 하면서 두 팀 전투력 차이의 최솟값을 구합니다.
난이도

어려움10점 중 8점

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

문제

Cube219는 전투 시뮬레이션 게임을 즐겨 한다. 이 게임에서는 길이가 NN인 공간에 1번부터 NN번까지 병사들이 일렬로 서 있다. ii번째 병사는 전투력 aia_i를 가진다. 전투력은 음수가 될 수도 있다.

Cube219는 QQ번의 전투 시뮬레이션을 하려 한다. ii번째 전투에서는 lil_i번째부터 rir_i번째까지 연속된 구간을 고르고, 이 구간을 [li,⋯ ,k][l_i, \cdots, k]와 [k+1,⋯ ,ri][k+1, \cdots, r_i]라는 연속된 두 팀으로 나눈다. 팀의 전투력은 팀에 속한 병사들의 전투력 합으로 정해진다.

Cube219는 전투가 치열하게 일어나는 것을 좋아하므로, 두 팀의 전투력 차이가 최소가 되도록 팀을 나누려 한다. 다만 병사 수 차이가 지나치게 큰 것도 싫어서, 한 팀의 크기가 전체 전투 구간의 23\dfrac{2}{3}를 넘지 않도록 한다. 이 조건을 만족하면서, 각 전투 시뮬레이션마다 두 팀 전투력 차이의 최솟값을 구하시오.

입력

첫 번째 줄에 구간의 길이 NN이 주어진다. (3≤N≤3000003 \leq N \leq 300000)

두 번째 줄에 NN개의 정수 a1,⋯ ,aNa_1, \cdots, a_N이 공백으로 구분되어 주어진다. (−109≤ai≤109-10^9 \leq a_i \leq 10^9) aia_i는 ii번째 병사의 전투력이다.

세 번째 줄에 전투 시뮬레이션 횟수 QQ가 주어진다. (1≤Q≤3000001 \leq Q \leq 300000)

네 번째 줄부터 QQ개의 줄에 걸쳐 정수 li,ril_i, r_i가 공백으로 구분되어 주어진다. (1≤li<ri≤N1 \leq l_i < r_i \leq N; ri−li+1r_i-l_i+1은 3의 배수) li,ril_i, r_i는 ii번째 전투 시뮬레이션 구간의 왼쪽 끝과 오른쪽 끝 위치이다.

출력

QQ개의 줄에 각 전투 시뮬레이션의 답, 즉 두 팀 전투력 차이의 최솟값을 한 줄에 하나씩 출력한다.

예제1

  1. 예제 1

    입력
    10
    27 1 11 17 -5 9 3 -10 -10 9
    5
    4 9
    1 6
    3 5
    2 10
    1 9
    
    예상 출력
    20
    4
    1
    23
    35