역 템플릿 (펜윅 나무)

// P1908逆序对 
#INCLUDE <비트 / stdc ++ H.> 사용 스페이스 성병; 
타입 정의 LL;
CONST의 INT MXN = 5e5 + (5) ;
int로 A [MXN], C [MXN], B [MXN], F [MXN];
INT의 N; 
인라인 INT lowbit ( INT X) {
     돌아가 , X - X; 
} 
인라인 LL의 GET ( INT X) { 
    LL 합 = 0 ;
     (; X, X- = lowbit (X)) { 
        합계 + = C [X]; 
    } 반환
   
    합집합; 
} 
인라인 공극 motify ( INT (X), INT의 Y) {
      (; X <= N, X + = lowbit (X)) { 
        C [X] + = Y; 
    } 
} 
INT 의 main () { 
    CIN >> N;
    위한 ( int로 I = 1 ; 나는 <= N; I ++는 ) { 
        는 scanf ( " %의 D를 " , & A [I]); 
        B [내가] = A [I]; 
    } 
    정렬 (B + 1 , B +는 N + 1 );
    INT N = 고유 (b +의1 , B + N + 1 ) -B- 1 ;
    위한 ( int로 I = 1 ; i가 <= N; 내가 ++ ) { 
        A [내가] = LOWER_BOUND (B + 1 , B + N + 1 , A [I]) - B; 
    } 
    에 대해 ( int로 I = 1 난 ++; i가 N = < {) 
        motify을 (a [i]는, 1 ); 
        F [I] = I- GET (a [I]); 
    } 
    LL ANS = 0 ;
    위한 ( int로 I = 1 ; 나는 <= N; I ++는 ) { 
        ANS+ = F [I]; 
    } 
    COUT << ANS;
    반환  0 ; 
}

 

추천

출처www.cnblogs.com/duojiaming/p/11760790.html