2019 CCFキャンプ1日目

ここで最初の日は、彼は非常に無知な力であると言いました。そして、線形データ構造について話CKWを見つけることは非常に困難です。

スタックとキューについて

1.両端キュー

そして<整数>アウト。

de.push_back(X)。

de.push_front(X)。

de.pop()_バック。

de.pop()_フロント。

de.back();

de.front();

de.empty();

2.ブラケットのタイトルシーケンス

タイトルは私たちに良い&&と||配慮の重要性を伝えます。

スタックストレージ右括弧を使用すると、イベントの左括弧が判断をポップされます。

書式#include <iostreamの> 
の#include <cstdioを> 
する#include <スタック>
 使用して 名前空間はstd; 

文字列S1;
int型のlen、徐を。
BOOL VIS [ 109 ]。
スタック <ペア< チャー整数 >> Q。
char型になりました。

INT メイン(){ 
    CIN >> S1。
    LEN = s1.size()。
    以下のためにint型 i = 0 ; iがLEN <; iは++ ){
         場合(S1 [i]が== ' ' || s1を[I] ==' [ ' 
            q.push(make_pair(S1 [i]は、I))。
        他に{
             場合(!q.empty()){  = q.top()最初。 = q.top()は、第2。
            } 
            であれば(S1 [i]が== ' ' &&今== ' ' ){ 
                VIS [I] = 1 ; VIS [徐] = 1 ; q.pop()。
            } 
            であれば(S1 [i]が== ' ] ' &&今== ' [ '){
                VIS [I] = 1 ; VIS [徐] = 1 ; q.pop()。
            } 
        } 
    } 
    のためのint型 I = 0 ; iがLEN <; Iは++ ){
         場合(VIS [I] == 0 ){
             場合(S1 [i]が== ' ' || S1 [i]を== ' ' ){ 
                のprintf(" ()" )。
            } 
            であれば(S1 [i]が== ' [ ' || S1 [i]を== ' ] ' ){
                のprintf(" [] " )。
            } 
        } 
        のprintf(" %のC " 、S1 [i])と; 
    } 
    戻り 0 
}
コードの表示

3.単調スタック

この質問を考えてみましょう:あなたの番号を与えるために、最初の大きなデジタルのそれぞれの値を取得する権利を
その数に等しい位置です。線形を達成するために必要。
ポップされたスタックの最上部よりも大きな遭遇したスタックのわからない、右から左に配列全体をスキャンします。もはやまでは決定していません。(ほとんどの時間のためのリバーススキャン)

4.問題

これは、すべての1 <= L <= R <= N求めるため、n個のデジタル[1] ... [n]を有しています
MAX([L]、[L + 1]、...、[R])と合計、N <= 1E6。
 
検討し、逆になることができる最大のデジタル最大範囲を検討します。決定された左、右は彼の数(その反対が再び掃引)([0]と考え[N + 1]調停を回避するために、特正の無限大である)よりも大きいときにピットが満たすこと数に等しいです。帝国は大きな左、右よりも(例えば、1111111)
5.別の問題
シーク、n桁を考慮し、1 <= L <= R <= nのように(R?-L + 1)*分([L]、[L + 1]、...、[R])最大。N <= 1000000
そして、質問にのような、比較、非常に暴力的な解決策を模索します。
6.問題もあります
マトリックスがあり、各位置は、0又は1です。最大のすべてのサブ行列を探しています。N×m個<= 1000000。
そして、接頭辞で行うことができ、各ライン、到達可能な最小を求めて上向きの各行をスキャンすることができます。彼らは(nm)のOです。
 
単調なキュー
タイトルはあなたが遅れているよりも、あなたはあなたよりもオフひどく演奏されるよりも、つまり、ウィンドウをスライディングと述べました。
問題は、{A_N}およびm区間[L(I)、R(I)]を満たすL(I)<= L(I + 1)、R(I)<= R(i + 1)の数が存在することです。各間隔の間隔の最大値を求めています。
直接チームに小さな、キューの先頭より大きく、キューが空になった再突入チームがあります。O(N)
リスト
使用はありません。
 プレフィックスと差動
O(N)前処理、O(1)問い合わせ
そして、1次元と2次元のプレフィックスとプレフィックス。UH-Dは、理解することは比較的困難です
求:B [X、Y] = bの[X-1、Y] + B [X、Y-1] -b [X-1、Y-1] + [X、Y]
加算行列:S(X1、Y1、X2、Y2)= B [X1-1、Y1-1] + B [X2、Y2] -b [X1-1、Y2] + B [X2、Y1-1]
二次元の違いは非常に魔法です
実際には、差がプレフィックスと逆のプロセスであり、接頭辞とプッシュ上から構成されてもよいです。
基数ソート
2 = 32768の15乗
基数ソートより一般的には、バレルの行である、それはターン予めローからハイへの最後の最初の行、に応じて、すべての図形に開放されています。またはハイからローに推進しています。それはまた、バイナリバレル列に変換することができます。
STL
 
書式#include <アルゴリズム>
 
 スタック、キュー、デック、PRIORITY_QUEUE、ベクトル、セット、マップ
両端キュー定数が小さくない、使用しないでください
PRIORITY_QUEUE大きなヒープ根、根は、スタックまたはオペレータのオーバーロードの反対側に挿入することができます。
 
ベクトル)(v.sizeはいけない! - 1を、それが空のベクター-1に、unsigned int型のタイプであるためには、INFを取得します
v.resize約()Oの複雑さである(MAX(1、パラメータ()サイズ変更中 - 元のサイズ()))の

v.clear()とベクトル<>()。区別スワップ(V)A。
前者はクリアふりをされて•、実際のメモリは回復されていません。
•後者は本当に回復しているが、ニーズやv.size()時間の大きさに比例しています

 

 

おすすめ

転載: www.cnblogs.com/jindui/p/11272543.html