#include <ビット/ STDC ++ H.> 使用して 名前空間STD; typedefの長い ロングLL、 CONST INT MAXN 1E6 + = 100 ; int型A [MAXN]; int型 C [MAXN]; //は、アレイ内の各点の情報ブロックを表し、 INT MK [MAXN]; // 各ブロック内のマーカーの数の値の数 のint L [MAXNは]; //は、各ブロックの開始を記録 INT R&LT [MAXN]; //は、各ブロックの端記録 INTを POS [MAXN]; // そのブロック内のポイントをマークする intを R1 [MAXN]; // 右の各要素のマーカーの数は、それらよりも小さい 整数のmain(){ int型 N。 scanf関数(" %のD "、&N)。 以下のために(INT iが= 1 ; I <= N; I ++ ) のscanf(" %dの"、および[I])、[I] + = 10010 。 INT、T = SQRT(MAXN)。 以下のために(INT iが= 1 ; I <= T; I ++ ){ L [I] =(I- 1)* T + 1 。 R [I] = I * T。 } もし、(R [T] <MAXN)T ++、L [T] = R [T- 1 ] + 1、R [T] = N。 にとって(int型iは= 1 ; I <= T; I ++ ){ ため(INT J = L [i]は、J <= R [i]は、J ++ ){ posは[j]は = iは、 } } のためには、(INTは iがNを=; I> = 1 ; i-- ){ C [I]] ++ ; MK [POS [[I]]] ++ ; 用(INT J = A [i]の- 1 ; J> = L [POS [I]]]; j-- ) R 1 [I] + = C [J]。 用(INT J = POS [I]] - 1 ; J> = 1; j--) R 1 [I] + = MK [J]。 } ため(INT iは= 1 ; I <= N; I ++ ){ 場合(I =!1)のprintf(" " )。 printf(" %dの" 、R1 [I])。 } }