아직 만들고 있는 페이지입니다.

이 페이지는 아직 만드는 중입니다. 보이는 내용은 바뀔 수 있습니다.

수열의 장인

면접 대비

시간 제한1초메모리 제한256 MB

요약
-2부터 2까지 정수로 이루어진 수열에서 연속 구간 곱이 가장 큰 값을 구해 1000000007로 나눈 나머지를 출력합니다.
난이도

보통10점 중 5점

유형
그리디, 동적 계획법, 수학
정답자
아직 제출이 없습니다

문제

승현이는 수열을 찾는 사람들을 위해 길이가 NN인 수열 a1,a2,…,aNa_1, a_2, \dots, a_N을 만드는 일을 한다. 경력이 짧아서 각 원소가 −2-2 이상 22 이하인 정수 수열만 만들 수 있고, 그래서 찾아오는 고객이 많지 않다.

이를 지켜보던 지학이가 승현이에게 수열을 하나 의뢰했다. 지학이는 완성된 수열에서 연속한 구간 ai,ai+1,…,aj−1,aja_i, a_{i+1}, \dots, a_{j-1}, a_j (1≤i≤j≤N1 \le i \le j \le N)를 하나 골라, 고른 구간의 원소를 모두 곱한 값 ai×ai+1×⋯×aj−1×aja_i \times a_{i+1} \times \dots \times a_{j-1} \times a_j를 가장 크게 만들려고 한다. i=ji = j이면 곱은 aia_i로 정의한다.

승현이가 만든 수열이 주어질 때, 지학이가 얻을 수 있는 곱의 최댓값을 구하라.

입력

첫 줄에 테스트 케이스의 수 TT (1≤T≤1000001 \le T \le 100000)가 주어진다. 이후 TT개의 테스트 케이스가 이어진다.

각 테스트 케이스의 첫 줄에는 수열의 길이 NN (2≤N≤1000002 \le N \le 100000)이 주어진다. 둘째 줄에는 수열의 원소 a1,a2,…,aNa_1, a_2, \dots, a_N (−2≤ai≤2-2 \le a_i \le 2)이 공백을 사이에 두고 주어진다.

모든 테스트 케이스의 NN의 총합은 300000300000을 넘지 않는다.

출력

각 테스트 케이스마다 곱의 최댓값을 1,000,000,0071{,}000{,}000{,}007 (=109+7= 10^9 + 7)로 나눈 나머지를 한 줄에 하나씩 출력한다.

최댓값은 실제 곱한 값끼리 비교해서 고르고, 그렇게 고른 값 하나만 나머지 연산을 적용한다.

예제4

  1. 예제 1

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

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

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

    입력
    3
    5
    -1 -1 -1 -1 -1
    4
    -2 -2 -2 -2
    7
    -2 1 -2 0 -2 -2 2
    
    예상 출력
    1
    16
    8