Moloco 배열 변환 (어려움)

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

보통6세그먼트 트리이분 탐색정렬배열면접 대비아직 제출이 없습니다시간 제한2초메모리 제한512 MB

문제

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

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

S[i]={j:(1j<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이 주어진다. (1n10000001 \le n \le 1\,000\,000)

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

출력

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