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

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

주식 시장

면접 대비

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

요약
합이 가장 큰 연속 부분 배열을 찾아 1부터 시작하는 시작과 끝 인덱스를 출력하고, 동점이면 시작 인덱스가 작은 쪽, 그다음 끝 인덱스가 작은 쪽을 고른다.
난이도

보통10점 중 5점

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

문제

한 은행이 보유한 주식의 날짜별 손익(그날의 이익 또는 손실) 자료를 모았다. 이 수치를 바탕으로, 어느 날 사서 어느 날 팔았어야 이익이 가장 컸을지를 계산해 실제 성과와 비교하려고 한다.

날짜별 손익이 순서대로 주어질 때, 이익의 합이 최대가 되는 연속 구간을 찾는 프로그램을 작성하라. 이 구간은 첫 번째 원소와 마지막 원소의 1-기반 인덱스로 나타낸다(인덱스는 1부터 센다). 사는 날과 파는 날은 각각 정확히 하나씩 골라야 한다. (그렇지 않다면 손익이 0 이상인 날에만 주식을 보유하면 되므로 문제가 너무 단순해진다.)

입력

첫째 줄에는 테스트 케이스의 수가 주어진다. 각 테스트 케이스는 다음과 같은 형식이다.

  • 한 줄에 수열의 길이 NN이 주어진다 (1≤N≤1061 \le N \le 10^6).
  • 한 줄에 NN개의 정수 pip_i가 공백 하나로 구분되어 주어진다 (−103≤pi≤103-10^3 \le p_i \le 10^3). pip_i는 ii번째 날의 손익이다. 적어도 하나의 정수는 양수이다.

출력

각 테스트 케이스마다, ii번째부터 jj번째까지(양 끝 포함) 정수들의 합이 최대가 되는 두 정수 ii와 jj를 한 줄에 출력한다 (1≤i≤j≤N1 \le i \le j \le N). 합이 최대가 되는 쌍이 여러 개라면 ii가 가장 작은 것을 출력하고, 그래도 여러 개라면 jj가 가장 작은 것을 출력한다.

예제3

  1. 예제 1

    입력
    2
    11
    -3 1 -1 2 3 1 -1 2 -3 -5 7
    9
    1 -2 3 -1 -1 3 -2 2 -4
    
    예상 출력
    2 8
    3 6
    
  2. 예제 2

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

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