超クイックソートPOJ - 逆転しようとしている2299フェンウィックツリー

#include <iostreamの> 
する#include <cstdioを> 
する#include <アルゴリズム> 
の#include <CStringの>
 使用して 名前空間をSTD。
typedefの長い 長いLL。
CONST  INT N = 5E5 + 10 int型のn;
int型[N]と、
INT TR [N]。
INT B [N]。
int型のC [N]。 
INT lowbit(INT X)
{ 
    戻り X& - X。
} 
ボイド追加(int型のx、int型のC)
{ 
    INT I = X; I <= N; I + = lowbit(I))
        TR [I] + = C。
} 
int型の和(INT X)
{ 
    int型 RES = 0 int型 ; I、I = I = X lowbit(I))
        RES + = TR [I]。
    リターンのres; 
} 
INT )(主
{ 
    一方(CIN >> N、N)
    { 
        ためINT iは= 1 ; iが<= N; I ++ 
        { 
            CIN >> [I]。
            B [i]は =[I]; 
        } 
        // 終了位置 
        替え(B + 1、bは+ 1 + N-);
         // 、cは、次に配置Bの要素のA位置 
         // A 1〜n個の要素が位置にあるべきです
        
        // 等価離散化
        するためのINT I = 1 ; I <= N-I ++ 
            C [I] = LOWER_BOUND(B + 1、B +は1。 - + N-、A [I])B; 
        のmemset(TR、0はsizeof TR); 
        LL ANS = 0 ;
         のためのINT I = 1 I <= N; I ++
        { 
            (c [i]は、追加1 )。
            ANS + = I- 和(C [I])。
        } 
        COUT << ANS << ENDL。
    } 
}

 

おすすめ

転載: www.cnblogs.com/QingyuYYYYY/p/12285709.html