リバーステンプレート(フェンウィック木)

// P1908逆順
#include <ビット/ STDC ++。H>
使用して 名前空間はstdを、
typedefの長い 長いLL。
const  int型 MXN = 5E5 + 5 int型[MXN]、C [MXN]、B [MXN]、F [MXN]。
int型のn;
インラインINT lowbit(INT X){
     戻り X& - X。
}
インラインLL GETINT 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 ; iが++; iが<= N ){
        scanf関数(" %のD "、および[I])。
        B [i]は = [I]。
    }
    ソート(B + 1、B + N + 1 )。
    INT N =一意(B + 1、B + N + 1)-B- 1 以下のためにint型 i = 1 ; iが++; iが<= N ){
        [I] = LOWER_BOUND(B + 1、B + N + 1、[I]) - B。
    }
    以下のためにint型 i = 1 ; iが++; iが<= N ){
        motify([I]、1 );
        F [I] = I- GET ([I])。
    }
    LL ANS = 0 以下のためにint型 i = 1 ; iが++; iが<= N ){ + = F [i]は、
    }
    coutの << 年。
    リターン 0 ;
}

 

おすすめ

転載: www.cnblogs.com/duojiaming/p/11760790.html