データ構造(下)

1.木のカバーの木

(1)フェンウィックツリーカバーフェンウィックツリー

フロント:

どのようにフェンウィックツリーのサポートに加え、範囲と範囲のクエリ

値の位置を見つけるために、差分配列を維持し、私たちは前に付ける必要があると長方形と見られ、

マイナス2つの数の寄与は補間することによって生成することができます

1.P4514神は7分のタイトルを作りました

質問の意味:サポートプラス長方形と長方形のクエリ値の数。

私たちがしたいときに、各点の差を考えてみましょう((a、b)は、\ (x、y)は\) 実際には、マトリックスプラス1時00分の範囲を:

\(A(B)+1 \)

\((X、B + 1)-1 \)

\((Y + 1)-1 \)

\((X + 1、Y + 1)+1 \)

それ以来、プレフィックスと:

\ [\ sum_ {I = A} ^ X \ sum_ {J = B} ^のyA(I、J)*(X-I + 1)*(Y-J + 1)\]

\ [\ sum_ {I = A} ^ X \ sum_ {J = B} ^のyA(I、J)*(Xの*のY + 1)+(I、J)* i *がJA(I、J)*私は(Y + 1)-A(i、j)は* J×(X + 1)\ *

维护\((i、j)は* iのjは*、A(i、j)は* I、A(i、j)は* jを、A(i、j)は\)即可

(2)重量部のスリーブセグメントツリーセグメントツリー

1.P3332 [ZJOI2013] Kタルスス問い合わせ

質問の意味:

1 ABC:Bは、第1の位置で第一の位置、各位置プラス数cを表します

2 ABC:第二の位置Bへの最初の位置からクエリを表し、多数Cの数であります

直接に。

(3)。フェンウィックツリーセット議長ツリー

私たちは、単一のツリーは、接頭辞と単一の私達の会長に似ていることがわかりました。我々は修復するポイントが必要な場合

変更、および評価は、私たちは、毎年秋に倍の数に変更、フェンウィックツリーのメンテナンス間隔との関係を考えます

\(O(ログイン^ 2N)\)が、クエリは、このような複雑になってきたたびに。

1.P2617ダイナミックランキング裸题
2.ダイナミック逆順
3.P4175 [CTSC2008]ネットワーク管理

質問の意味:ツリー内のチェーンのメンテナンスk番目の最大値、および変更をサポートしています。

解決法:直接木のカバーツリーと、ツリーのセクション、優れたセット\(O(nlog ^ 3N)を \)

(4)バランスのとれたツリーセグメントツリーのセット

1.P3380 [テンプレート2つの強制平衡ツリー(木カバー木)

巨大な巨人は、私は自分自身を作る場合に、実際には、何も言わなかった\(YY \)のうち、\(O(^ 3Nをログ) \) アプローチ、

しかし、こんにゃくはつまり、前ではなく、大規模な定数が付属しています。

2.ポイントの分割統治

ツリーの高さを維持し、重心の右側を求めるたびに、合計複雑であること点線規則の複雑

\(O(nlog N)\ ) の

1.P3806 [テンプレート]パーティション1点

ソリューション:ロールラフボード

2.P4149 [IOI2011]レース

ソリューション:マルチ側の数を維持します

3.P2634 [ナショナルチーム]コングコングココア

ソリューション:ロールラフボード

3.ダイナミック点線のルール

分割統治の動的な点は、それへの変更をサポートすることです。

その後、我々はそうこれに基づいて、我々は、点線を構築することができ、点線のルールは常に重心を見つけることである必要があります知っています

ツリー、非常に良いです。そして、我々は実際には分割統治のすべての点は、各回答の重心の総和以上のものではないことを知っています。

重心のそれぞれへの答えは直接記録されています。サブツリーの複雑さの点から構築まだ非常に安全です。

分割統治は非常にダイナミックなポイントは、啓示を与えて、まだあります。

1.P3345 [ZJOI2015]郷ファンタジー戦略ゲーム

質問の意味:木、右のポイントに、右側があります。、ポイントを変更する権利をサポートして、ポイントを識別するために、すべてのポイントを尋ねました

*重量と、この時点までの最短距離。

ソリューション:

1.この質問の美しい自然は、重力の木の中心部を見つけることです。

2.重心への直接この質問はVに行き、その後sumd_v> sumd_u $ $ 2 \回を満たすためにした場合。

3.私たちは、すべての統計は、この時点から*重みで注目したいです。点線ツリーが行うことができます。それは次のようになります。

ll count(int x){
    ll res = 0 ;
    res += sumval[x] ;
    for(int i = x ; Hfa[i] ; i = Hfa[i] ){
        ll fr = Distance( x , Hfa[i] ) ;
        res += ( sumval[Hfa[i]] - sumf[i] ) ;
        res += 1ll * ( sumg[Hfa[i]] - sumg[i] ) * fr ;
    }
    return res ;
}
ll query(int x){
    ll tmp = count( x ) ;
    for(int i = Fire[x] ; i ; i = Nex[i] ){
        int v = To[i] ;
        if( count( v ) < tmp ) return query( near[i] ) ;
    }
    return tmp ;
}
2.P3241 [HNOI2015]ショップ

この質問は、実際には上記のルーチンと同じである、波、ベクトル記録波を構築するために木を点在。

3.P3676小さな新鮮なデータ構造その

神は問題です。

我々\(S_I \)は表し\(私は\)サブツリーのを

ここでは、わかります(\ sum_ {i = 1から\ } ^ nS_i ^ 2 \) 非常に良い取引であり、非常に美しい自然がものではありません

私たちは、のは、インパクトの種類を生成するために戻ってルート変更を見てみましょう、最初の改正を検討していません。

ツリーは、このされている場合。今で(5 \)\ドットがルートである、と今するつもり(1 \)を\ルートドット

それだけパスことが判明\(1-5 \)サブツリーの大きさがポイントとなります。だから、美しく、恐ろしい結び目を見つけることができます

理論:

\ [\ sum_ {i = 1} ^ nS_i(SUM-S_I)\]

それは一定です。この設定は、設定されている\(Wです\)

答えは

\ [ANS =合計の\ sum_ {i = 1} ^ nS_i-W \]

但し

\ [\ sum_ {i = 1} ^ nS_i = \ sum_ {i = 1} dep_ivali \]

点線のツリーは、直接修飾することができます

我々は、単一の点を変更することを検討し始めました。

任意の2点について、その製品の寄与は、彼らがちょうど同じサブツリーに分類されていないため、両方の生産しました。

そこにこのような状況\(DIS(i、j)は \) 回

そう

\ [\ sum_ {i = 1} ^ nS_i(SUMのa-Si)= \ sum_ {i = 1} ^ n個の\ sum_ {J = 1} ^ NDIS(i、j)はval_ival_j \]

シングルポイントの変更のために:

\ [W_ {新規} =追加* \ sum_ {J = 1} ^ NDIS(I、J)* val_j \]

これは、その後、可能点線の木であります

上記と同様の文言

P2056 [ZJOI2007]かくれんぼを4かくれんぼ

私は、ヒープを使用することですあなたが学ぶことができ、ハードコードは言いませんでした

struct node{
    priority_queue<int> A , B ;
    void insert(int x){
        A.push(x) ;
    }
    void dele(int x){
        if( A.top() == x ) A.pop() ;
        else B.push(x) ;
    }
    int Top(){
        while( !A.empty() && !B.empty() && A.top() == B.top() ) A.pop() , B.pop() ;
        if( A.empty() ) return -inf ;
        else return A.top() ;
    }
    int nex_top(){
        int rt = Top() ;
        if( rt == -inf ) return -inf ;
        A.pop() ; int nexrt = Top() ;
        A.push( rt ) ;
        return nexrt ;
    }
}ans , tofa[N] , stree[N] ;

4.LCT

(1)チェーン情報:

1.P1501 [ナショナルチーム]ツリーII
2.P2147 [SDOI2008]洞窟の調査
4.P4332 [SHOI2014]三叉神経ツリー

被神仙叫做模板题。每棵平衡树在其中维护最深不是2的以及最深不是1的点。然

后乱搞就行。

(2)维护图连通性:

1.P2387 [NOI2014]魔法森林

排个序,维护一波。

2.P2542 [AHOI2005]航线规划

维护双连通,倒叙做

3.P4234 最小差值生成树

这里的话需要先新建节点,表示两点之间的边权。维护链的最小值,删掉就行。

4.P4172 [WC2006]水管局长

不知道为什么别人一个个跑得飞快。这道题,也就是维护一个最大边,形成一个

圈就删去即可。

(3)维护子树信息:

1.P4219 [BJOI2014]大融合

注意虚子树修改在\(link\)\(access\)中要进行。

2.P3703 [SDOI2017]树点涂色

在浑浊的\(LCT\)中,这简直就是一股清流。

线段树\(dfs\)序来维护一棵子树的颜色总和。

每次将根到某个点的链全部染成同一种颜色就是一次\(access\)操作。于是乎

\(access\)每断一次边下面的原来链的子树答案加1,新加入的链的子树答案全部减

1

5.树链剖分

这是一个收集篇,收集树剖好题。

1.P4211 [LNOI2014]LCA

建个下标为标号的主席树的dfs序(维护区间差分个数)

6.扫描线

1.P1972 [SDOI2009]HH的项链

感受一下

2.P4113 [HEOI2012]采花

感受一下

3.P1856 [USACO5.5]矩形周长Picture

luogu无矩形面积并,不过这个也差不多。

跑两边扫描线,每次加差值就行。

4.P1502 窗口的星星

おすすめ

転載: www.cnblogs.com/powerYao/p/11445293.html