ツリーラインクエリと

#include " stdafx.hを" 
の#include <iostreamの> 
の#include <ベクトル> 
の#include <アルゴリズム> 
書式#include < 文字列 > 
の#include < セット > 
の#include <キュー> 
の#include <マップ> 
書式#include <sstream提供> 
する#include < cstdioを> 
する#include <CStringの> 
の#include <数値> 
の#include <cmath> 
の#include <iomanip> 
書式#include <両端キュー> 
の#include <ビットセット>
// する#include <unordered_set>
 //#include <unordered_map>
 // の#include <ビット/ STDC ++ H>
 // の#include <xfunctional> 
の#define LL長い長
 の#define PII対<整数、整数>
 使用して 名前空間STDを、
INTの DIR [ 5 ] [ 2 ] = {{ 01 }、{ 0、 - 1 }、{ 10 }、{ - 10 }、{ 00 }}。
constの 長い 長い INF = 0x7f7f7f7f7f7f7f7f const  int型= INF 0x3f3f3f3f ;
 constの ダブル PI = 3.14159265358979 CONST  INT MOD = + 1E9 7。 CONST  INT MAXN = 2005 ;
 // IF(X <0 || X> Y = R&LT || <|| 0 Y> = C)
 / / 1000000000000000000 
INT [ 200005 ];
 構造体ノード{
     int型のL;
     INT R&LT;
     INT W; 
}ツリー[MAXN]; 
ボイド変更(int型のx、int型 A){ // 変性ノードツリーのxの値[X] .W A + 
    IF(X == 0のリターン ; // 代表更新 
    ツリー[X] .W + = A; 
    変更(X / 2 、A);
     リターン; 
} 
ボイドビルド(int型 X、intは、左INT右){ // X電流基準ノードである 
    ツリー[X] .L = 左、
    ツリー[X] .R = 右;
     IFは(==左{右)
        変化は(X、[左]); // xの修正値です[左] 
        リターン; 
    } 
    ビルド(2 * X、左、()+左/右2 ); 
    ビルド(2 * X + 1、(右+左)/ 2 + 1 、右);
     // 各再帰呼び出し約
    返す; 
} 
int型の追加(int型 X、intは、左INT右){ // 戻りインターバルそして
    IF((ツリー[X] .L ==左)&&(ツリー[X] .R ==右))は// 正確に、W戻り等しく
        リターン[X] .Wツリー;
     INT MID =(ツリー[X]ツリー+ .L [X] .R)/ 2 ;
     IF(右<= MID)// だけ左息子に存在することができる
        返すの追加(X * 2、左、右);
     IF(左> MID)// 唯一の右の息子が中に存在することができる
        返すの追加(X * 2 + 1。右、左を、
     返すの追加(X * 2、左、MID)追加+(Xの* 2 + 1、MID + 1、右); // 最も一般的な場合、再び二分割
} 


int型のmain()
{ 
    int型のサイズ、
    CIN >> サイズ;
     のためINT I = 1 ; I <=サイズ; I ++ 
        CIN >> A [I]; 
    [ビルド(1。 1 、サイズ)。
    int型のres = 0 ;
    以下のためにINT iが= 1 ; I <=サイズ; I ++ 
    { 
        ためINT J = 0 ; I + J <=サイズ; J ++ 
        { 
            場合(ADD(1、I、I + J))
                RES ++ 
        } 
    } 
    COUT << RES << ENDL。
    返す 0 ; 
}

 

おすすめ

転載: www.cnblogs.com/dealer/p/12669134.html