codeforces1197Dもう一つのサブアレイ問題DP

URL:http://codeforces.com/problemset/problem/1197/D

質問の意味:

これは、シーケンスの長さを与え、$ N- $ $ M $、$ k個の$($ N \の当量の3E5、m個の\当量10、k個の\当量の1E9の$)$ \ sum_ {i = L} ^ {R} a_iをを求めて、 -k \ lceil \ FRAC {R-L + 1} {M} \ rceilの$最大。

ソリューション:

どこへ行く最初の事はt3からt8で最大感とサブコラム、その後、直接WAです。インターバルのマイナス長ので問題を感じていない、実際には、記録間隔の長さは、オンラインプロセスを選択した場合でも、サブ列の長さの変化と、後でそれについて考えていません。期間未満を失う可能性があり、対応する値を差し引いた後に失われません。したがって、各数についての質問は唯一、つまり、$ jのの%mは==私が?$(I [0、M-1]で\)、そして右の時点でみましょう($ jのの%mを満たすために、その位置を列挙することができます== Kは$を$値を減算I $)は、新たなシーケンスを形成する新たなサブ配列、および列の最大値を検索します。それ以外の場合はマイナス$ kの$をリークします、解決するために右の時点で最大に達したときに更新してください。なぜ私は何をする必要がありますか?答えは、このような列挙は不要であると分類におけるマイナスkの対応する数に議論することができ、特定の列挙の右端に見出さなければならない、またはそれらは間隔の長さよりも大きくすることができる$ Mは$間隔だけマイナス1を発生します誤った結果の$ kは$。

ACコード:

#include <ビット/ STDC ++ H.> 
使用して名前空間STD; 
ロングロングA [300005]、B [300005]; 
int型のmain()
{ 
    int型N-、M、K; 
    CIN >> M >> N-K; 用0 =私はint型、I <N - 、I ++)は
        CIN >> A [I]; 
    ;長ロングマックス= 0、ANS = 0 
    Iがm <; Iは++)//列挙(I = 0 int型用位置k保存
    { 
        ため(INT J = 0を; J <N-; J ++)
            B [J]は[J] = - (J == I K%のM:0); //保存kはのために必要ですローカル処理
        マックス= 0; 
        のための(INT J = 0; J <N-; J ++)
        { 
            マックス= MAX(マックス+ B [J]、0LL); //最もサブカラムを行い、
            (jは%mを場合== I)
                ANS = MAX(ANS、マックス); //すべてのサブ列と最大値kは、対応する数だけデクリメントされることを保証する
            COUT << MAXX << ""。
        } 
        COUT << ENDL。
    } 
    COUT << ANS << ENDL。
    0を返します。
}

 

おすすめ

転載: www.cnblogs.com/Aya-Uchida/p/11298594.html