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

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

분리자

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

요약
값을 하나씩 덧붙여 나가면서 매번, 앞의 모든 원소가 더 작고 뒤의 모든 원소가 더 큰 분리자 인덱스가 몇 개인지 출력한다.
난이도

어려움10점 중 8점

유형
트리, 구현, 이분 탐색, 정렬
정답자
아직 제출이 없습니다

문제

서로 다른 정수로 이루어진 수열 A=(a1,a2,…)A = (a_1, a_2, \ldots)가 있다. 인덱스 jj가 다음 두 조건을 만족하면 분리자라고 한다.

  • 모든 k<jk < j에 대해 ak<aja_k < a_j,
  • 모든 k>jk > j에 대해 ak>aja_k > a_j.

다시 말해, 배열 AA는 aja_j보다 작은 원소들, aja_j 자신, aja_j보다 큰 원소들, 이렇게 세 부분으로 나뉜다.

예를 들어 A=(30,10,20,50,80,60,90)A = (30, 10, 20, 50, 80, 60, 90)이라 하자. 분리자는 인덱스 4와 7이며, 각각 값 50과 90에 대응한다.

수열 AA는 처음에 비어 있다. AA에 하나씩 덧붙일 원소 a1,…,ana_1, \ldots, a_n이 주어진다. 각 aia_i를 덧붙인 뒤, 현재 수열에 있는 분리자의 개수 sis_i를 출력한다.

입력 형식은 답을 온라인으로 계산하도록 정해져 있다. AA에 덧붙일 원소 aia_i 대신 수열 bib_i가 주어진다.

입력은 다음과 같이 처리한다.

빈 수열 AA에는 분리자가 s0=0s_0 = 0개 있다.

각 i=1i = 1부터 nn까지 다음을 수행한다.

  1. ai=(bi+si−1) mod 109a_i = (b_i + s_{i-1}) \bmod 10^9을 계산한다.
  2. aia_i를 수열 AA에 덧붙인다.
  3. 현재 수열 AA의 분리자 개수 sis_i를 계산한다.
  4. sis_i를 한 줄에 출력한다.

입력

첫째 줄에 정수 nn이 주어진다. (1≤n≤1061 \le n \le 10^6) 이는 처리할 질의의 수이다.

이어서 nn개의 줄이 주어진다. 이 중 ii번째 줄에는 정수 bib_i가 주어진다. (0≤bi≤109−10 \le b_i \le 10^9 - 1) bib_i는 계산할 aia_i가 모두 서로 다르도록 정해져 있다.

출력

위에서 설명한 대로 s1s_1부터 sns_n까지 nn개의 줄에 출력한다.

힌트

첫 번째 예제는 문제 지문에 설명되어 있다.

두 번째 예제를 복호화하면 A=(0,1,2,3,4,5,6,7,8,9)A = (0, 1, 2, 3, 4, 5, 6, 7, 8, 9)이다.

예제2

  1. 예제 1

    입력
    7
    30
    9
    20
    50
    79
    58
    89
    
    예상 출력
    1
    0
    0
    1
    2
    1
    2
    
  2. 예제 2

    입력
    10
    0
    0
    0
    0
    0
    0
    0
    0
    0
    0
    
    예상 출력
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10