PAT-T1010レーマーコード(ブロッキング溶液)

 

 

 

#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])。
    } 
}

 

おすすめ

転載: www.cnblogs.com/zhanglichen/p/12642048.html