CCPC-wannaflyキャンプ2日目講義の概要(ドゥユーハオ - データ構造)

・スタック、スタック単調

スタックの基本的な操作の1特性
2.スタック単調

単調スタックは特別なスタック、その要素が単調に保持されている(単調増加または減少)スタックです。
  :・単調増加スタック、スタックの底部から上部にスタックが順次インクリメントされる(許容等しい単調スタックは非減少)
  スタック、降順にスタックの下から上にスタック単調減少・(スタックを非増加単調:許可等しい)
Qes1 Aに。配列は、左の各番号を見つけるには、その最初の数よりも大きい
アプローチ:単調なスタックを維持することが
①自体よりも小さいスタック要素の現在のトップは、トップ要素自体よりも第1の大きなまで、ポップアップ表示し続ける場合最初の番号の残っている要素は、それ自身よりも大きい場合
、スタックが空になるまで、あなたがポップされている場合は、左よりもその要素上で見つけることができません②
所有スタックの最上部に参加します③
:見つけることができ、より具体的なアプローチをリンカスクリプトの追加
デカルトをツリー
qes1、各セグメントの最小間隔を求める。
プラクティス:デカルトツリー
いくつかの特性:
①自然スタック、ヒープ細根、二つのサブ値は父親に等しい値よりも大きい
②特性バイナリ検索ツリー、すなわち点左サブツリーキー(デフォルトの添字)は、大きな先行順ツリーのルート、可能なプロ配列によるよりも、根、右のサブツリーポイントキー(デフォルトの添字)明確に(インクリメンタル方式の構造)よりも小さい
③取調べ添字唯一見つけるために最小値J(I <J)に添字I、間 LCAの[I、J]
④変更が唯一の右端の一方の鎖に変化し、左のサブツリーは変更されません。そして右のスタックに対応する鎖、左サブツリーに要素のスタック
(sizeL + 1)*(:素子間隔には最小の長さであるサイザー+ 1)
参考リンク:追加リンカー

・キュー、キュー単調

。の最大間隔長区間kの全て見つけるqes1
モノトーンキュー(同様の単調スタック):アプローチ
①挿入:新しい要素を尾破棄単調から挿入された場合、尾部要素は、削除されないまで挿入されます単調性の破壊、およびまで、単調キューに挿入。
アクセスと最後の要素:最適な(最大および最小)値を得る②
ポップアップする必要があり、その生存を超えてキュー要素の③ヘッドを

・STL

1.Vecotor、スタック、キュー
2.set、地図、PRIORITY_QUEUE

①setサポート挿入()、消去()操作
②upper_bound()、LOWER_BOUNDは()を直接(s.lower_boundを追加するために使用することはできません)
③map<int型、int型> X SET <ペア<INT、INT >>と同等
3.multiset
①再利用可能な支持要素
②erase()オペレーションと同じ要素のすべてを削除する
(LOWER_BOUND:配列[1,1,2,3,4,4,5]に③ )(第4見つけること)UPPER_BOUND、最初の4を見つける
4のみ複数を削除するために④シーケンス内③た:s.earse(LOWER_BOUND(4))
4.unordered_map、unordered_set
①使用UPPER_BOUNDことができません()とLOWER_BOUND()は、
②収集(基本的にハッシュテーブル)の要素かどうかの問い合わせの複雑さの中に(1)Oすることができ
、いくつかのコレクションが保持され、番号の挿入をサポートしています。qes1番号を削除し、幼い頃からのすべての番号を見つけますそしてXOR大きい注文後
練習:最初のすべての要素を並べ替え、その後、排他的又は二つの隣接するコレクション内の2つの要素間の関係を追加

   、削除:削除と要素間の関係は、2つの要素を削除し、それに接続されています。新たに形成された二つの追加要素は、それに接続され
   挿入:()、LOWER_BOUNDとの位置に対応する要素を見つけ、元の関係を削除し、新しい関係を追加します

・ツリーを倍増

qes1祖先までK-ポイントを求めている。
プラクティス:木の乗数

配列定義FA [i]の[j]を表し、最初の2 ^ jは父ノードIです。
その後、我々はそのようなプロパティを見つける:
FA [i]は[J] = FA [FA [i]と[J-1]] [J-1]
物語で次のように最初の2 ^ jは私だった父が2の2の(J-1)父親(J-1)の父親
。仮説例11父のU
バイナリ1011に①11
> F - ②u-> F(U ,. 3) (U ,. 1) - > F(U、0)は、
LCAを見つけるqes2。
二点(即ち、深さ)場合①同一の
ログKため=(N)0
  IF F(U、K)= F(V、K)
    継続
  他
    U = F(U、K)、V = F(V、K)の
2つが同じ高さ、第一の低点ジャンプ高い類似度深さでない場合②
qes3。二点間の最大の経路を求めます値
アイデア:乗算同時にG(U、J)= MAX(G(U、J-1)、G((F(U、J-1)、J-記録1))。

qes4いくつかの操作。すべての側面上のパスプラス値は、操作を完了した後、各エッジの重みを見つけるたびに
同様qes3では、全ての情報が三点によって得られた情報をマージすることができます

・STテーブル

1.RMQの
クエリの複雑さのために、各時間間隔はO(1)であり、後O(nlogn))の時間計算量を必要とする効率的なクエリ間隔最大値/最小値、のための方法は、前処理しました。
前処理は、
Mnの[I] [j]は連続J ^ 2の最小番号の先頭からi番目のビットを表して配置されています。例えば、MN [2] [1] 3の最小値、6間の第二の桁、すなわち開始最小2連続番号、すなわちMN [2] [1] = 3;
その後、我々はそれがハンドオーバを受信していると思いますプッシュ式:
Mnの[I] [J] =分(MN [I]、[J - 1]、Mnは[I +(J << 1 - 1)] [J - 1。])
クエリ
、我々が必要とし、区間[L 、最小値R]で、その結果、K = LOG2(R - L + 1) 区間[L、R]の最小RMQ [L、R] =分 (MN [L] [k]は、MN [R - (K << 1)+ 1] [K])。
2.RMQはLCA見つける
①コンセプト

スタンプ-最初のノードはDFNを記録し、DFS番号を横切っ。
オイラー配列- SEQ ID NO DFS形成横断ノード、ノード、OL記録。(裏面を含む)
②RMQはオイラーシーケンス上で実行
深[I] [J]は、それ自身を含むiが2 ^ jのノード開始状態から最小値を示している
[J]の深さを表すID [I]を[I] [j]は、ノード番号に対応する、すなわち、2 ^ j個のLCAこれらのノード。
LCAのオールで[DFN [X]、 OL [DFN [Y] (閉区間)の間、及び前記最下位ノードは、それが明らかであり、深さ:( DFN [X] <DFN [Y])が設けられ
(X 、Y)と、2つのケースがあり、xがyの先祖であり、その後、Yは下方にトラバースされ到着します。
X X X LCA(x、y)は、yの到着を介して、結合された出口に到達すると、ツリーのパスのx、yの一意性、以降Yしない祖先。
III。次元RMQ

・分割統治

アイデア:解決するには、いくつかの小さな問題に大きな問題
のn * n個のマトリックスを持ってqes1、我々は各ラインの最小の位置を求めて、単調な最小の各行の位置は落ちませんでした知っている。
解決策:この問題は、決定単調です問題は、我々は最初の最小のO(N)の力が中心線の位置を見つけられることができ、その後、パーティションの両側が最小位置溶液短くする

擬似コード:
解く(L、R&LTを、B)//ラインLRの代表ABカラム
  MID =(L + R&LT)>> 1。
  私が=の場合:Bの
    検索(POS)は//最小値の位置を見つける
  。l≤midIF 1-
    (L ,. 1-MID、POS)解決
  IF Rを≧ +。1 MID
    解決(MID +。1、R&LT、POS、B)

・セグメントツリー

ブログの記事のひとつ:HTTPS://www.cnblogs.com/AC-King/p/7789013.html
。qes1 A列、プラスのサポート期間、間隔乗算、加算間隔

難易度が範囲プラスレンジを維持しながら、乗算する方法ですマークが
ややどのように気を行うために、彼らは乗算が漠然と最高の優先順位は、長い間ブログを探していることは、書き込みに、それを修正するために一日に発生した特定の問題があるか見つけることができませんでした覚えて、書き込みではないでしょう忘れ
qes2が。飛行機あるn個の点は、矩形内のインタロゲーションポイントの数の各々は、オフライン許可
アプローチ:スキャンラインは

まず問い合わせを読み取り、特定のソート、他の側縁点ベガクエリのプレス次元座標
配列qes3。 、プラスサポート部と、第1の間隔は数kのよりも大きい尋ねる
練習:ツリーラインの半分、2部の間の位置(その後、戻って、少し奇妙なああ、あなたがたの範囲を感じるああ秩序の並べ替えではありませんが、DLSはそう言います)

qes4。完全長の配列N、操作m回、各回後の動作は、[Lは、R]昇順または降順にこの範囲では、動作の数X m回の位置を見つけている
この問題はQAQを話せなかったDLSをそして、希望が出てくるします

・ヒューリスティックマージ

qes1。コレクションの数がありますが、2つのコレクションが合併をサポートし、k番目の最大の発見
、すべての内部ソートの①最初のセット
②収集に大に小さなマージするためにあらゆる暴力的な合併
実際には非常に暴力的なルックスが、時間の複雑さをのみ(nlogn)
擬似コード:
 マージ(A、B)
  のサイズ(A)>サイズ(B)//セット2つのExchange a.swap(B)
    Xの場合:Bの
      a.insert(B)
それぞれの子はqes2を決定しましたモードツリー
アプローチ:DSUに木(ツリーヒューリスティック合併)、ある点までDFSは、すべての点が、そのサブツリーをマージモードセット見つける

  サブツリーの問題は:単一の要素は、のセットであります
擬似コード:
  DFS(U)
  サBU = {}
  V用:ソン[U]
    DFS(V)
    SUをSV = U-SA

・Segementビート(ツリーラインのようなギター)

詳細ブログ:HTTPS://oi-wiki.org/ds/seg-beats/#ctsn-loves-segment-tree
。シーケンスにQes1、サポート分間隔を取るために、そして間隔最大を要求し、間隔(HDU5306ゴージャスシーケンス)
実践:メンテナンス間隔の最大値Max、約2倍のSe、および合計間隔と最大数CNT、今分間隔取る方法を検討

①Max≤tは、tは、これは意味、直接のリターンをしないことは明らかである場合
②の場合のSe <T ≤マックスは、このtは現在の最大間隔を更新することができます。間隔を聞かせてとCNT(T-max)を追加し、マックスはトンで、マークを作る更新我々はそう
tは≤SE、そしてあなたは、更新に関連する問題のどのように多くの数を知っていないことを見つけたとき場合③。だから、私たちの戦略は、運用ダウン暴力再帰的です。そして、情報をアップロード

これらは、について話して内容を理解ハッハッハ、私は、次の質問は、後でアップハッハッハようにするために、話すことはありませんでしたか理解していなかった置かれ

・セグメントツリーの分割統治

qes1。オフライン、サポートダイナミック図ボーダー消去動作、尋問の接続で縁取ら

・DFS順

qes1。各点は、fの値、各点サブツリーのG値、及びf値を有します。修正f数をサポートして、サブツリーg値と尋ねる
qes2を。あなたの木を付け、右側が最遠点のこのサブツリー、要件のU Vの問い合わせに、この点を負でもよいです

・木の会長

qes1。二桁ポイントを、力によって
qes2。大のKの範囲クエリ
qes3は。両者の間に大きな木K-求め
qes4を。あなたのシーケンスA1、A2を与えます...、。クエリーQ、それぞれ所定のLに、R、X Lを見つけ、そして排他的OR X Rとの最大数の後

・CDQパーティション

qes1。三次元の点の数
qes2。グラフは、全てのi、jについて、kはiからjまでの長さkの最短経路なく得られます

发布了13 篇原创文章 · 获赞 1 · 访问量 91

おすすめ

転載: blog.csdn.net/weixin_43115940/article/details/103994405