ch_5501ループ輸送

単調なキュー

zhk手書きモノトーンキュー定義:

最初に  、L = R = 0

(L、R]は 有効な元素であります

左端の要素の削除  ++リットルを

削除右端の要素  、-R

有効なキュー要素:Lは+ 1 <= R&LT。 すなわち  L <R

最左点取る  Q [L + 1]

右端点取る  Q [R]を

書式#include <iostreamの>  
の#include <cstdioを>

#defineは、 int型の登録RI
 の#define U int型

名前空間のOPT {
    
    Uインラインでの(){
        UX(0)、F(1 )。
        チャーS(GETCHAR())。
        一方、(S < ' 0 ' || S> ' 9 ' ){
             もし、(S == ' - ')、F = - 1 
            S = GETCHAR()。
        }
        一方、(S> = ' 0 ' && S <= ' 9 ' ){
            X =(X << 1)+(X << 3)+ S- ' 0 ' 
            S = GETCHAR()。
        }
        リターンのx * F;
    }
    
}

使用してオプトインを:: 

#define NN 1000005

書式#include <アルゴリズム>

名前空間の主力{
    
    UQ [NN]、[NN]、L、R、N、ANS。
    
    インラインボイド{)(解きます
        Nは = ();
        (RI I(1); I <= N; ++ I)[I] = [I + N] = において();
        (RI I(1); I <=(N << 1); ++ I){
             一方(L + 1 <= R && Q [L + 1 ] <I-(N >> 1))++ L。
            もし(L + 1 <= r)はANS = STD :: MAX(ANS、[Q [L + 1 ]] - Q [L + 1 ] + I + [I])。
            一方(L + 1 <= R && [Q [R] - Q [R] <= [I] -i) - R。
            Q [ ++ R] = I。
        } 
        std :: coutの << ANS;
    }
    
}

INT メイン(){
    
    // freopenは( "X.TXT"、 "R"、STDIN)。
    std ::イオス:: sync_with_stdio();
    主力::(解決)。
    
}

 

おすすめ

転載: www.cnblogs.com/ling-zhi/p/11815716.html