만드는 중입니다

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

Moloco 배열 변환 (어려움)

면접 대비

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

요약
서로 다른 정수 n개로 이루어진 배열에서 각 위치 i마다 앞에 있으면서 A[i]보다 작은 원소의 개수를 세어 출력한다. n은 최대 100만이다.
난이도

보통10점 중 6점

유형
세그먼트 트리, 이분 탐색, 정렬, 배열
정답자
아직 제출이 없습니다

문제

대용량 데이터의 관리와 분석은 Moloco의 핵심 사업에서 중요한 부분이다. 어느 날 동료가 까다로운 문제를 들고 왔고, 이제 당신이 해결해야 한다.

원본 데이터를 나타내는, 서로 다른 정수 nn개짜리 배열 AA가 주어진다. 이 배열로 길이가 nn인 새 배열 SS를 만들어야 한다. S[i]S[i]는 자기 앞에 놓이면서 값이 A[i]A[i]보다 작은 원소의 개수다.

S[i]=∣{ j:(1≤j<i)∧(A[j]<A[i]) }∣S[i] = |\{\, j : (1 \le j < i) \wedge (A[j] < A[i]) \,\}|

예를 들어 A=[10,5,12,1,11]A = [10, 5, 12, 1, 11]이면 S=[0,0,2,0,3]S = [0, 0, 2, 0, 3]이다.

입력

첫째 줄에 정수 nn이 주어진다. (1≤n≤1 000 0001 \le n \le 1\,000\,000)

이어지는 nn개 줄에 배열의 원소가 한 줄에 하나씩 주어진다. i+1i+1번째 줄의 수가 A[i]A[i]다. 모든 원소는 서로 다르고, ∣A[i]∣≤2 000 000 000|A[i]| \le 2\,000\,000\,000이다.

출력

nn개의 줄을 출력한다. ii번째 줄에는 S[i]S[i]를 정수 하나로 출력한다.

예제6

  1. 예제 1

    입력
    5
    10
    5
    12
    1
    11
    
    예상 출력
    0
    0
    2
    0
    3
    
  2. 예제 2

    입력
    1
    -2000000000
    
    예상 출력
    0
    
  3. 예제 3

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

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

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

    입력
    2
    5
    -5
    
    예상 출력
    0
    0