Codeforces 1167Fスカラクエリフェンウィックツリー

オリジナルリンク: http://www.cnblogs.com/CJLHY/p/10874005.html

スカラクエリ

昨日は狂気失うように見えたプレーはなかった、それはそのSB問題ああそうです。

私たちは、最初のxの数のための単一区間[L、R]、[L、R]を考慮し、我々は、それがちょうど発注後の桁数のように排出される前に移動する必要があります。

だから、全体のxに対して、xのx個より少ないだけ貢献、私たちはその数字よりも、すべての小さなを計算し、xの前の数字は、xを含むすべてのセグメントで排出しました。

これは、配列の配列を維持するために使用することができます。   

#include <ビット/ STDC ++。H>
 の#defineは LL長い長
 の#define LD長い二
 の#define ULL符号なし長い長
 の#define第Fiの
 に#define SE第二
 の#define MK make_pair
 の#define PLL対<LL、LL>
 の#define PLI対<LL、整数>
 の#define PII対<整数、整数>
 の#define SZ(X)((INT)x.size())
 の#define ALL(X)(X).begin()、(X).END( )
 の#define FIOイオス:: sync_with_stdio(偽); cin.tie(0)。使用して名前空間はstdを、CONSTのINT N = 5E5 + 7 const int型

 

  INF = 0x3f3f3f3f constの LL INF = 0x3f3f3f3f3f3f3f3f const  int型 MOD = 1E9 + 7 constの ダブル EPS = 1E- 8 ;
CONST  ダブル PI = ACOS( - 1 )。

テンプレート < クラス T、クラス S>インラインボイド追加(T&、S b)は{A + B =。もし(A> = MOD)A - = MOD;} 
テンプレート < クラス T、クラス S>インラインボイドサブ(T&、S b)は、{ - = B。もし(< 0)、A + = MOD;} 
テンプレート < クラス T、クラス S>インラインブール chkmax(T&、S b)は{ 返す <bは?= B、;} 
テンプレート < クラス T、クラス S>インラインブール chkmin(T&、S b)は{ 返す > bは?A = B、;} 

構造体ビット{
     INT [N]。
    ボイドは、(変更INT X、INT {V)
         のためにINTI = xと; 私はNを<; I + = I& - I)([I]を追加し、V)
    } 
    int型の和(INT X){ 
        LL ANS = 0 以下のためにint型 I = xを、I; iが- = I& - I)(ANS、[I])を加えます。
        戻るANSを。
    } 
    INTクエリ(int型 L、INT R){
         場合(L> R)戻り 0 ;
        リターン(SUM(R) -和(L - 1)+ MOD)%MOD。
    } 
}ビット[ 2 ]。

int型[N]、nは、ID [N]。
LL CNT [N]。

ブール CMP(int型のx、int型のY){
     戻り [X] < [Y]を。
} 

int型のmain(){ 
    scanf関数(" %のD "、&N)
    以下のためにint型 i = 1 ; iが<= N; iは++)(scanf関数を" %のD "、&​​[i])と、ID [I] = I。
    ソート(ID + 1、ID + 1 + N、CMP)。
    int型 ANS = 0 ;
    以下のためにint型 i = 1 ; iが++; iが<= N ){
        INT X = ID [i]は、
        LL CNT = 0 
        追加(CNT、1LL *ビット[ 0 ] .query(1、X - 1)*(N - X + 1)%のMOD)。
        追加(CNT、1LL *ビット[ 1 ] .query(X + 1、N)* X%MOD)。
        追加(CNT、1LL * X *(N - X + 1)%のMOD)。
        (ANS、CNT追加 * [X]%のMOD)。
        ビット[ 0 ] .modify(X、X)。
        ビット[ 1 ] .modify(X、N - X + 1 )。
    } 
    のprintf(" %d個の\ n " 、ANS)。
    リターン 0 ; 
} 

/ * 
* /

 

ます。https://www.cnblogs.com/CJLHY/p/10874005.htmlで再現

おすすめ

転載: blog.csdn.net/weixin_30338497/article/details/94875015